为什么新的日期设定为今天回报昨天

时间:2016-04-26 22:02:00

标签: 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);

3 个答案:

答案 0 :(得分:2)

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

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

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

...你会得到你所要求的。表示2016年4月26日的日期对象( UTC )。

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

我知道,解析时区真的很令人沮丧。为了处理不同的时区,您可以试用MomentMoment Timezone。我想时刻应该符合您的需求,但仅仅是为了完成。

答案 1 :(得分:0)

只需使用Date.now()。我不知道为什么字符串不能正常工作,但无论如何都会有效。

答案 2 :(得分:0)

你问的是日期26,但是随着时区的变化,它会让你回到2小时,为什么不只是alert(new Date());让它给你当前的日期?,还要检查它是否使用ssh进入服务器并输入日期,如果不是您的日期,您可以使用tzselect将服务器修改为您的日期