gpt4 book ai didi

Javascript Date() 给出错误的日期一小时

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:52 24 4
gpt4 key购买 nike

我在 java (Spring-MVC) 中从我的 Controller 发送这个日期,mysql 中的类型是 datetime

@Temporal(TemporalType.TIMESTAMP) 
@Column(name = "..") public Date getYy() {
return this.yy;
}

如:[2015-09-30 00:00:00.0]

当我使用 ajax 获取此日期时 1443567600000 :

new Date(1443567600000) 转换为 Tue Sep 29 2015 23:00:00 GMT+0000 (Maroc)

那么为什么我把日期错了一个小时?

解决方案

我们解决它

d = new Date(value) ;
d.setTime( d.getTime() - new Date().getTimezoneOffset()*60*1000 );

因为这是夏令时 (DST) 或夏令时问题。好article

最佳答案

这种 JS 对 Date 的处理方式令人大跌眼镜。

我在英国...“简单”,因为我们使用格林威治标准时间 (UTC)...除了夏季月份,当有 DST(英国夏令时,BST)时。时钟在夏天向前走,在冬天向后走(顺便说一句,这很愚蠢,但那是另一个问题!)一个小时。三月的一天,格林威治标准时间下午 4 点现在称为下午 5 点(英国夏令时)。

夏季月:

如果你执行 new Date( '2017-08-08' ) 这会给你 (toString) 'Date 2017-08-08T00:00:00.000Z '.

但是,如果您执行 new Date( '2017-08-08 00:00' ),这将为您提供 'Date 2017-08-07T23:00 :00.000Z'!

在第二种情况下,JS 似乎试图“提供帮助”,因为您规定了指定 BST 时间的时间。所以它适应 GMT/UTC。否则它不会...虽然(当然)它仍然会生成一个 Date 对象,该对象精确到毫秒。真是个陷阱!

确认:冬季 月...当不应用 BST 时:new Date( '2018-01-01 00:00' )/new Date( '2018-01-01' ): 两者都给出 'Date 2018-01-01T00 :00:00.000Z'

至于调整,好像要撤销自动调整就可以了

jsDate.setTime( jsDate.getTime() + jsDate.getTimezoneOffset() * 60 * 1000 );

...这有点像 Youssef 写的...除了您必须从特定的 Date 获取偏移量...而且我的实验似乎证明您添加了这个,而不是减去它。

如果 JS Date 的默认字符串表示给出 UTC 时间后跟 TZ(时区)偏移信息,真的会更有帮助,就像一些 ISO 日期格式一样:很明显, 包含此信息。

关于Javascript Date() 给出错误的日期一小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32469269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com