Dayjs - 与在托管服务器上运行的日期相比,本地日期不同

Dayjs - date is different locally compared to running on a hosted server

提问人:gb992 提问时间:10/27/2023 最后编辑:gb992 更新时间:10/27/2023 访问量:41

问:

我正在将字符串(样式为“THU 04 JUL 2024”)格式化为日期字符串,然后在对数据库的查询中使用该日期。

这是代码:

const groupDate = "THU 04 JUL 2024"
const myDate = dayjs(groupDate, 'Do MMM YYYY').format() 
// local server output: 2024-07-04T00:00:00+01:00 (correct) 
// production server output: 2024-07-04T00:00:00+00:00 (incorrect)

我需要它来使用伦敦时区,具体取决于日期是 BST 还是 GMT(例如,7 月的日期为 +1,1 月的日期为 +0)。

我尝试使用 utctimezone 插件,但它将日期转换为前一天的晚上 11 点,例如dayjs(myDate, 'Do MMM YYYY').utc().format() // 2024-07-03T23:00:00Z

这里的任何帮助都会很棒,谢谢

编辑

多亏了评论中@Spender的帮助,让我走上了正确的道路。问题是因为转换为 UTC 时,伦敦的“THU 04 JUL 2024”出现在 2024-07-03T23:00:00Z。

以下是工作代码:

const dayjs = require('dayjs')
const utc = require("dayjs/plugin/utc")
dayjs.extend(utc)
----
const groupDate = "THU 04 JUL 2024"
const myDate = dayjs(groupDate, 'Do MMM YYYY').format();

 
const _utcOffset = myDate.slice(-6); // gets the offset in time from utc

dayjs(myDate).utcOffset(_utcOffset).format() // formats it, ignoring the original offset

我可能没有很好地解释这一点,但它有效。

javascript 日期 时间 dayjs

评论

0赞 Pointy 10/27/2023
您的服务器与本地计算机位于不同的时区。
0赞 Pointy 10/27/2023
您显然可以获得一个名为“UTC”的 dayjs 插件,并使用它来强制指定特定日期的时区。
1赞 spender 10/27/2023
这是因为“THU 04 JUL 2024”在伦敦的开始时间发生在转换为 UTC 时。当然,您的数据库也会以 UTC 格式存储日期/时间,对吧?这很好,因为日期搜索将响应用户的本地时间。换个角度想一想......如果有人从世界的另一端打你,如果你不想让你的搜索日期提前半天,你应该搜索什么?一个日期本身(没有时间),不会削减它。2024-07-03T23:00:00Z
0赞 gb992 10/27/2023
嗨,@spender - 谢谢。我刚刚看到你对UTC时间的看法是正确的。我对此很陌生,所以它为什么会发生是相当令人困惑的。这是针对内部应用程序,仅在英国境内,因此在世界不同地区访问此数据的人没有问题。尝试在我的数据库中击中它失败了,因为它超出了 validFrom / to 范围:。我可以看到mongodb的值存储为字符串。有什么建议吗?validFrom: '2024-07-04T00:00:00+01:00'
1赞 gb992 10/27/2023
我现在已经解决了,你让我走上了正确的道路@spender - 谢谢!

答: 暂无答案