在我的Java脚本应用程序中,我以这样的格式存储日期:

2011-09-24

现在,当我尝试使用上面的值创建一个新的Date对象(这样我就可以以不同的格式检索日期)时,日期总是返回一天。见下文:

var date = new Date("2011-09-24");
console.log(date);

日志:

Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)

当前回答

只是想添加,显然在字符串末尾添加一个空格将使用UTC来创建。

new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)

new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)

编辑:这不是一个推荐的解决方案,只是一个替代答案。请不要使用这种方法,因为它非常不清楚正在发生什么。有很多种方法可以重构这个不小心导致错误。

其他回答

如果你需要一个简单的解决方案,请参阅:

new Date('1993-01-20'.split('-')); 

意思是格林尼治时间2011-09-24 00:00:00,因为你现在在格林尼治时间-4,所以是前一天的20:00。

就我个人而言,我得到的是2011-09-24 02:00:00,因为我生活在GMT +2。

如果希望获得本地时区某个日期的0小时,请将各个日期部分传递给date构造函数。

new Date(2011,08,24); // month value is 0 based, others are 1 based.

您正在使用ISO日期字符串格式,根据此页,将导致使用UTC时区构造日期:

注意:使用date构造函数(和 日期。解析,它们是等效的)是强烈不鼓励的,因为 浏览器差异和不一致。支持RFC 2822格式 字符串只是按照惯例。对ISO 8601格式的支持有所不同 只有日期的字符串(例如:"1970-01-01")被视为UTC,而不是 当地。

如果文本格式不同,例如“Jan 01 1970”,那么(至少在我的机器上)它使用您的本地时区。

我遇到过这样的问题。但我的问题是off set,而从数据库获取日期。

这是在数据库中,它是UTC格式。

2019-03-29 19:00:00.0000000 +00:00

所以当我从数据库和检查日期,它是添加偏移量与它,并发送回javascript。

它正在添加+05:00,因为这是我的服务器时区。我的客户在不同的时区+07:00。

2019-03-28T19:00:00+05:00 //这是我在javascript中得到的。

所以这是我的解决方案,我所做的这个问题。

var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);

因此,当日期来自服务器,有服务器偏移量,所以我分割日期和删除服务器偏移量,然后转换为日期。它解决了我的问题。