这是我第一次得到这个结果。
我正在使用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);
答案 0 :(得分:2)
新创建的日期对象完全正确。这里的错误部分或至少令您困惑的部分是您的浏览器,将日期对象解析为您当前的时区。
如果您创建一个新的日期对象并将其保存到变量...
var date = new Date('2016-04-26');
...你会得到你所要求的。表示2016年4月26日的日期对象( UTC )。
由于您使用浏览器获取日期对象值,因此该值只会通过您当地的时区进行解析(在您的情况下东部夏令时)。因此,如果您想要处理用于创建新日期对象的正确日期,可以使用.toUTCString()
。
我知道,解析时区真的很令人沮丧。为了处理不同的时区,您可以试用Moment或Moment Timezone。我想时刻应该符合您的需求,但仅仅是为了完成。
答案 1 :(得分:0)
只需使用Date.now()。我不知道为什么字符串不能正常工作,但无论如何都会有效。
答案 2 :(得分:0)
你问的是日期26,但是随着时区的变化,它会让你回到2小时,为什么不只是alert(new Date());
让它给你当前的日期?,还要检查它是否使用ssh进入服务器并输入日期,如果不是您的日期,您可以使用tzselect将服务器修改为您的日期