javascript - 为什么新日期定在今天又回到了昨天

标签 javascript date

<分区>

这是我第一次得到这个结果。

我使用的是 Telerik 控件 RadDatePicker,我正在客户端分配日期。

问题是控件不接受字符串作为日期,而是接受 javascript 中的 Date 对象

所以,我在控件中设置日期的代码是

var radDateControl = $find("radDateControl");
radDateControl.set_selectedDate(new Date('2016-04-26'));

但是,我意识到新日期返回的是昨天的日期!为什么?

现在是美国东部时间下午 5:58(美国和加拿大)。如果我这样做

alert(new Date('2016-04-26'));

我明白了

Mon Apr 25 2016 20:00:00 GMT-0400 (Eastern Daylight Time)

为什么以及如何才能得到今天的一天。


更新

我最后做的是这个。希望对其他人有帮助。

var dateAsString = "2016-04-26";
var year = dateAsString.split('-')[0];
var month = dateAsString.split('-')[1];
var day = dateAsString.split('-')[2];
var date = new Date(Date.UTC(year, month - 1, day, 0,0,0));
date.setTime(date.getTime() + date.getTimezoneOffset() * 60 * 1000);
rpdDateControl.set_selectedDate(date);

最佳答案

新创建的日期对象是完全正确的。这里的错误部分或至少让您感到困惑的部分是您的浏览器,将日期对象解析为您当前的时区。

如果您创建一个新的日期对象并将其保存到一个变量中......

var date = new Date('2016-04-26');

...你会得到你所要求的。代表 26/04/2016(UTC)的日期对象。

由于您使用浏览器获取日期对象值,因此该值只会通过您本地的时区(在您的情况下为东部夏令时)进行解析。因此,如果您想处理用于创建新日期对象的正确日期,您可以使用 .toUTCString()

我知道,解析时区真的很令人沮丧。为了处理不同的时区,你可以试试 MomentMoment Timezone .我想 moment 应该适合你的需要,但只是为了完成。

关于javascript - 为什么新日期定在今天又回到了昨天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36876583/

相关文章:

javascript - AngularJS 中的复杂 View 逻辑

javascript - 正则表达式 Javascript 将 Twitter 用户名与一些附加信息相匹配

javascript - JS 函数将 Javascript 返回给浏览器而不是预期的 Ajax post

javascript - 在 Javascript 函数中嵌套 jQuery 以从显示 :None 淡入 Div

ruby - 在 Ruby 中将两位数年份转换为四位数年份

php - 从您的 MySQL 表中获取特定年龄段的人

javascript - 选择单选按钮时如何清除文本字段内的文本

java - 将输入与 .txt 文件中的日期进行比较时出现问题

Android:计算离开应用程序的时间

C 天差 1 天不工作