我在java(ready
)中从我的控制器发送此日期Spring-MVC
中的类型为mysql
datetime
as:@Temporal(TemporalType.TIMESTAMP)
@Column(name = "..") public Date getYy() {
return this.yy;
}
当我使用ajax作为[2015-09-30 00:00:00.0]
获取此日期时:
1443567600000
转换为new Date(1443567600000)
那么为什么我的错误约会一小时?
解
我们通过
解决它Tue Sep 29 2015 23:00:00 GMT+0000 (Maroc)
因为它是夏令时(DST)或夏令时问题。好article
答案 0 :(得分:4)
我想这可能是夏令时问题。您可以检查客户的时区和服务器的时区。 (Web服务器或SQL Server)
答案 1 :(得分:3)
我们可能需要更多关于它的数据,但这可能是没有错,这取决于你如何设置和取回你的约会。
基本上1443567600000
不包含时区。它代表来自格林威治的Tue Sep 29 2015 23:00:00
。当然,这是一个时刻,它与任何具有不同时区的位置不同。同一时刻,发生在不同的时间(GMT + 1的午夜是GMT的晚上11点)。
您必须在数据库中存储时间和时区,并可能发送回JS,否则它将始终以不同的方式解释,取决于客户端的本地时间。
举个例子:
var d = new Date(2015, 8, 30);
console.log(d.toJSON()); // In my case I got "2015-09-29T22:00:00.000Z"
console.log(d.toDateString()); // "Wed Sep 30 2015"
答案 2 :(得分:3)
这种对日期的JS处理非常简单。
我在英国......“很容易”,因为我们使用的是GMT(UTC)......除了在夏季,有DST(英国夏令时,BST)。时钟在夏天前进,然后在冬天前进(愚蠢地顺便说一下,但那是另一个问题!)一小时。 3月的一天,格林威治标准时间下午4点现在称为下午5点(BST)。
夏天月:
如果你执行new Date( '2017-08-08' )
,这将给你(toString
)'日期2017-08-08T00:00:00.000Z'。
如果你new Date( '2017-08-08 00:00' )
,那么这将给你'2017-208日期 - 07T23 :00:00.000Z'!
在第二种情况下,似乎JS试图通过假设因为你规定了指定BST时间的小时来“有用”。所以它适应GMT / UTC。否则它不会......但是(当然)它仍会产生一个Date
对象,该对象特定于毫秒级。相当糟糕!
确认:冬季月...当未应用BST时:
new Date( '2018-01-01 00:00' )
/ new Date( '2018-01-01' )
:均为“日期2018-01-01T00:00:00.000Z”
至于调整,似乎要撤消自动调整,你只需要
jsDate.setTime( jsDate.getTime() + jsDate.getTimezoneOffset() * 60 * 1000 );
...这有点像优素福所写的...除了你必须从有问题的Date
获得偏移...而我的实验似乎证明你添加了这个,而不是减去它。
答案 3 :(得分:0)
更具体一点
time = new Date("2018-06-01 " + time);
var offset = time.getTimezoneOffset();
offset = Math.abs(offset / 60);
time.setHours(time.getHours() + offset);
在这种情况下,时间等于带有前导零的小时数:带前导零的分钟数。 这将为UTC添加小时差异。 如果您将字符串传递给日期,则将其视为UTC。