我想在JavaScript中解析一个没有时区的日期。我试着:

new Date(Date.parse("2005-07-08T00:00:00+0000"));

返回2005年7月8日星期五02:00:00 GMT+0200(中欧夏令时):

new Date(Date.parse("2005-07-08 00:00:00 GMT+0000"));

返回相同的结果,并且:

new Date(Date.parse("2005-07-08 00:00:00 GMT-0000"));

也返回相同的结果。

我想解析时间:

没有时区。 而不调用构造函数Date。UTC或new日期(年、月、日)。 通过简单地将一个字符串传递到Date构造函数(没有原型方法)。

我必须生成一个Date对象,而不是String对象。


当前回答

我也有同样的问题。我得到一个日期作为字符串,例如:'2016-08-25T00:00:00',但我需要有日期对象与正确的时间。要将String转换为object,我使用getTimezoneOffset:

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

getTimezoneOffset()将返回正负醚值。要在世界各地工作,就必须减去这个值。

其他回答

因为它确实是一个格式问题时显示日期(例如显示在本地时间),我喜欢使用新的(ish) Intl。DateTimeFormat对象来执行格式化,因为它更显式,并提供更多输出选项:

const dateOptions = { timeZone: 'UTC', month: 'long', day: 'numeric', year: 'numeric' };

const dateFormatter = new Intl.DateTimeFormat('en-US', dateOptions);
const dateAsFormattedString = dateFormatter.format(new Date('2019-06-01T00:00:00.000+00:00'));

console.log(dateAsFormattedString) // "June 1, 2019"

如所示,通过将timeZone设置为“UTC”,它将不会执行本地转换。作为奖励,它还允许您创建更精致的输出。你可以阅读更多关于国际。DateTimeFormat对象。

无需创建新的Intl就可以实现相同的功能。DateTimeFormat对象。简单地将语言环境和日期选项直接传递给toLocaleDateString()函数。

const dateOptions = { timeZone: 'UTC', month: 'long', day: 'numeric', year: 'numeric' };
const myDate = new Date('2019-06-01T00:00:00.000+00:00');
myDate.toLocaleDateString('en-US', dateOptions); // "June 1, 2019"

我也有同样的问题。我得到一个日期作为字符串,例如:'2016-08-25T00:00:00',但我需要有日期对象与正确的时间。要将String转换为object,我使用getTimezoneOffset:

var date = new Date('2016-08-25T00:00:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

getTimezoneOffset()将返回正负醚值。要在世界各地工作,就必须减去这个值。

解决方案几乎与@wawka的相同,但是它使用Math.abs处理不同时区的加减唱歌:

const date = new Date("2021-05-24T22:00:18.512Z")
const userTimezoneOffset = Math.abs(date.getTimezoneOffset() * 60000);
new Date(date.getTime() - userTimezoneOffset);

Timezone是Javascript的一部分。我使用以下代码根据时区调整日期。

var dt =新日期(“Fri Mar 11, 2022,下午4:03”); dt.setTime(dt. gettimezone胶印()*60 * 1000);//只是暂时的 document . write (dt toISOString ());

不幸的是,在默认情况下,日期解析有一些固有的问题没有得到很好的解决。

-人类可读的日期包含隐含的时区 网络上有许多广泛使用的日期格式是模棱两可的

为了简单明了地解决这些问题,我们需要这样一个函数:

>parse(whateverDateTimeString,expectedDatePattern,timezone)
"unix time in milliseconds"

我找过这个,但没有找到这样的东西!

所以我创造了: https://github.com/zsoltszabo/timestamp-grabber

享受吧!