为什么将新日期设置为今天会返回昨天

Why new Date set as today gives back yesterday

本文关键字:今天 返回 昨天 设置 新日期 日期 为什么      更新时间:2023-09-26

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

我正在使用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 格式)的 Date 对象。

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

我知道,解析时区可能真的很令人沮丧。为了处理不同的时区,您可以尝试时刻或时刻时区。我想时刻应该适合您的需求,但只是为了完成。

只需使用 Date.now() 即可。 我不确定为什么字符串不起作用,但这无论如何都会起作用。

您询问日期 26,但随着时区的更改,它会给您 2 小时,为什么不直接alert(new Date());并让它为您提供当前日期?,还要检查它使用 ssh 转到服务器并键入日期,如果不是您的日期,您可以使用 tzselect 将服务器修改为您的日期