在我的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)

当前回答

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

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

其他回答

这可能不是一个好的答案,但我只是想分享我在这个问题上的经验。

我的应用程序是全球使用utc日期的格式'YYYY-MM-DD',而datepicker插件我只接受js日期,这对我来说很难同时考虑utc和js。所以当我想传递一个'YYYY-MM-DD'格式的日期到我的datepicker,我首先转换为'MM/DD/YYYY'格式使用moment.js或任何你喜欢的,日期显示在datepicker现在是正确的。举个例子

var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale

显然d1是我想要的。希望这对一些人有所帮助。

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

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

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

注意,东部夏令时是-4小时,而你返回的日期是20小时。

20h + 4h = 24h

2011年9月24日午夜。日期是用UTC (GMT)解析的,因为您提供了一个只有日期的字符串,没有任何时区指示器。如果您给出的日期/时间字符串不带指示器(new date ("2011-09-24T00:00:00")),那么它将在您的本地时区进行解析。(历史上有不一致的地方,不仅仅是因为规范改变了不止一次,但现代浏览器应该是可以的;或者你总是可以包含一个时区指示器。)

你得到了正确的日期,只是没有指定正确的时区。

如果你需要访问日期值,你可以使用getUTCDate()或任何其他getUTC*()函数:

var d, 天; d = new日期('2011-09-24'); 天=[‘太阳’,‘我’,“面前”,“结婚”,“碰头”,“星期五”,“坐”); console.log(天[d.getUTCDay ()));

当我的客户使用大西洋标准时间时,我遇到了这个问题。客户端检索到的日期值是“2018-11-23”,当代码将其传递到new date(“2018-11-23”)时,客户端的输出是前一天的日期。我创建了一个实用函数,如代码片段所示,它规范化了日期,向客户端提供了预期的日期。

日期。

var normalizeDate = function(date) { date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); return date; }; var date = new Date("2018-11-23"); document.getElementById("default").textContent = date; document.getElementById("normalized").textContent = normalizeDate(date); <h2>Calling new Date("2018-11-23")</h2> <div> <label><b>Default</b> : </label> <span id="default"></span> </div> <hr> <div> <label><b>Normalized</b> : </label> <span id="normalized"></span> </div>

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

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