簡體   English   中英

aws EBS 服務器上的日期計算錯誤。 它在本地運行得很好

[英]Date miscalculation on aws EBS server. It's running perfectly fine on local

部署在aws server上總是會出現誤算。

語境:

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環境變量啟動它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM