使用设置的时区创建日期,而不使用字符串表示形式

2022-08-29 23:08:48

我有一个网页,其中包含日,月和年三个下拉列表。如果我使用采用数字的JavaScript构造函数,那么我将获得当前时区的对象:DateDate

new Date(xiYear, xiMonth, xiDate)

给出正确的日期,但由于夏令时,它认为该日期是GMT + 01:00。

这里的问题是,然后我将其传递给Ajax方法,当日期在服务器上被反化时,它已被转换为GMT,因此损失了一个小时,将一天向前移动了一个小时。现在,我可以将日、月和年分别传递到Ajax方法中,但似乎应该有更好的方法。Date

被接受的答案为我指出了正确的方向,但是仅仅使用本身就改变了:setUTCHours()

Apr 5th 00:00 GMT+01:00 

Apr 4th 23:00 GMT+01:00

然后,我还必须设置UTC日期,月份和年份以结束

Apr 5th 01:00 GMT+01:00

这就是我想要的。


答案 1

使用它可以实际设置UTC时间的日期,这将允许您在整个系统中使用UTC时间。.setUTCHours()

但是,除非指定日期字符串,否则无法在构造函数中使用 UTC 设置它。

使用,您可以从特定的 UTC 时间创建 Date 对象。new Date(Date.UTC(year, month, day, hour, minute, second))


答案 2
var d = new Date(xiYear, xiMonth, xiDate);
d.setTime( d.getTime() + d.getTimezoneOffset()*60*1000 );

这个答案是专门为原始问题量身定制的,不会给出你一定期望的答案。特别是,有些人会想要减去时区偏移量,而不是添加它。请记住,此解决方案的全部意义在于为特定的反序列化破解javascript的date对象,而不是在所有情况下都是正确的。