在我的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)
在我的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)
当前回答
这解决了我的问题(感谢@Sebastiao的回答)
var date = new Date();
//"Thu Jun 10 2021 18:46:00 GMT+0200 (Eastern European Standard Time)"
date.toString().split(/\+|-/)[0] ; // .split(/\+|-/) is a regex for matching + or -
//"Thu Jun 10 2021 18:46:00 GMT"
var date_string_as_Y_M_D = (new Date(date)).toISOString().split('T')[0];
//2021-06-10
其他回答
我解析ISO日期而不受时区困扰的解决方案是在解析它之前在结尾添加“T12:00:00”,因为当格林威治的中午时,整个世界都在同一天:
function toDate(isoDateString) {
// isoDateString is a string like "yyyy-MM-dd"
return new Date(`${isoDateString}T12:00:00`);
}
之前:
> new Date("2020-10-06")
> Date Mon Oct 05 2020 14:00:00 GMT-1000 (heure normale d’Hawaii - Aléoutiennes)
后:
> toDate("2020-10-06")
> Date Tue Oct 06 2020 12:00:00 GMT-1000 (heure normale d’Hawaii - Aléoutiennes)
我认为这与时区调整有关。您创建的日期是GMT,默认时间是午夜,但您的时区是EDT,因此减去4小时。试着验证一下:
var doo = new Date("2011-09-25 EDT");
如果希望获得本地时区某个日期的0小时,请将各个日期部分传递给date构造函数。
new Date(2011,08,24); // month value is 0 based, others are 1 based.
您可以通过将此日期转换为UTC日期
new Date(Date.UTC(Year, Month, Day, Hour, Minute, Second))
并且总是建议使用UTC(通用时区)日期,而不是使用本地时间的日期,因为默认情况下,日期以UTC存储在数据库中。因此,在整个项目中使用和解释UTC格式的日期是一个很好的实践。 例如,
Date.getUTCYear(), getUTCMonth(), getUTCDay(), getUTCHours()
因此,使用UTC日期解决了所有与时区相关的问题。
注意,东部夏令时是-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 ()));