我将日期存储为DATE06-JUN-2022
.
我需要将其更改为时间戳,并使时间相当于用户所在时区的纽约上午9点:
- 对于犹他州的用户(比纽约晚2小时),时间将被设置为上午7点,因为当犹他州早上7点时,纽约早上9点。
- 对于加利福尼亚(比纽约晚3小时)的用户,时间将被设置为上午6点,因为当加利福尼亚是早上6点时,纽约是上午9点。
我很容易在前端的JavaScript中使用date-fns-tz做到这一点当我的计算机的时间被手动设置为犹他州时间,当给定日期06-JUN-2022
时,返回值是Mon Jun 06 2022 07:00:00 GMT-0600
,这正是我想要的。代码如下:
const { zonedTimeToUtc } = require("date-fns-tz");
export function fixTimeZone(date) {
let currentTimeStamp = new Date((date += " 09:00::00"));
let correctTimeStamp = zonedTimeToUtc(currentTimeStamp, "America/New_York");
return correctTimeStamp;
}
在PostgreSQL中是否有一种方法可以实现类似的结果,以便在发送给客户端之前将日期转换为具有正确更改时间的时间戳?PostgreSQL是否可以访问用户的时区,或者必须在前端完成?类似于
select
('06-JUN-2022'::date + time '9:00')
at time zone 'America/New_York' AT TIME ZONE 'America/Denver';
timezone
---------------------
06/06/2022 07:00:00
select
('06-JUN-2022'::date + time '9:00')
at time zone 'America/New_York' AT TIME ZONE 'America/Los_Angeles';
timezone
---------------------
06/06/2022 06:00:00
参见AT TIME ZONE获取更多信息。