在我的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)
当前回答
你的问题是时区。注意GMT-0400部分,也就是你比GMT晚4个小时。如果在显示的日期/时间上加上4个小时,就会得到2011/09/24的零点。使用toUTCString()方法来获取GMT字符串:
var doo = new Date("2011-09-24");
console.log(doo.toUTCString());
其他回答
要规范化日期并消除不需要的偏移量(在这里测试:https://jsfiddle.net/7xp1xL5m/):
var doo = new Date("2011-09-24");
console.log( new Date( doo.getTime() + Math.abs(doo.getTimezoneOffset()*60000) ) );
// Output: Sat Sep 24 2011 00:00:00 GMT-0400 (Eastern Daylight Time)
这也实现了同样的效果,并归功于@tpartee(在这里测试:https://jsfiddle.net/7xp1xL5m/1/):
var doo = new Date("2011-09-24");
console.log( new Date( doo.getTime() - doo.getTimezoneOffset() * -60000 ) );
我遇到过这样的问题。但我的问题是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);
因此,当日期来自服务器,有服务器偏移量,所以我分割日期和删除服务器偏移量,然后转换为日期。它解决了我的问题。
这解决了我的问题(感谢@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
// When the time zone offset is absent, date-only formats such as '2011-09-24' // are interpreted as UTC time, however the date object will display the date // relative to your machine's local time zone, thus producing a one-day-off output. const date = new Date('2011-09-24'); console.log(date); // Fri Sep 23 2011 17:00:00 GMT-0700 (PDT) console.log(date.toLocaleDateString('en-US')); // "9/23/2011" // To ensure the date object displays consistently with your input, simply set // the timeZone parameter to 'UTC' in your options argument. console.log(date.toLocaleDateString('en-US', { timeZone: 'UTC' })); // "9/24/2011"
您可以通过将此日期转换为UTC日期
new Date(Date.UTC(Year, Month, Day, Hour, Minute, Second))
并且总是建议使用UTC(通用时区)日期,而不是使用本地时间的日期,因为默认情况下,日期以UTC存储在数据库中。因此,在整个项目中使用和解释UTC格式的日期是一个很好的实践。 例如,
Date.getUTCYear(), getUTCMonth(), getUTCDay(), getUTCHours()
因此,使用UTC日期解决了所有与时区相关的问题。