AWS EBS 服务器上的日期计算错误。它在本地运行良好



在aws服务器上部署时总是会出现计算错误。

背景:

mongoDB中存储的所有日期都是UTC格式。在excel中导出日期之前,我想将日期转换为IST。

我的代码在我的本地机器上运行得很好,但是当部署到服务器上时,它就失败了。

下面是一个有助于理解这个问题的例子。

const myDate = new Date('2022-12-21T18:41:18.384+00:00');
// The value of convertedDate should be 2022/12/21
// But, it for some reason returns - 2022/12/22
const convertedDate = myDate.toLocaleDateString('en-GB'); 

我还尝试使用外部库date-fns来处理这个问题。下面是示例代码:

const zonedDate = utcToZonedTime(myDate, 'Asia/Kolkata');
// this is also - 2022/12/22
const convertedDate = formatInTimeZone(zonedDate, 'Asia/Kolkata', 'yyyy-MM-dd');
);

我尝试的date-fns的另一个变体是:

const zonedDate = utcToZonedTime(
new Date(myDate.valueOf() + myDate.getTimezoneOffset() * 60 * 1000),
'Asia/Kolkata',
);
// this is also - 2022/12/22
const convertedDate = formatInTimeZone(zonedDate, 'Asia/Kolkata', 'yyyy-MM-dd');

请注意,在本地,一切都很好。

我也尝试使用外部库date-fns来处理这个问题。

似乎您前后转换了,或者甚至转换了两次(对于双倍的时区偏移量?)您应该根本不需要使用utcToZonedTime。只需将原始myDate时间戳传递到formatInTimeZone:

const convertedDate = formatInTimeZone(myDate, 'Asia/Kolkata', 'yyyy-MM-dd');

在本地,一切都很好

将您的系统时区更改为服务器的时区(很可能是UTC),您应该能够重现该问题。对于node.js,使用TZ环境变量启动它。

最新更新