创建日期会自动添加一小时到我的输入日期

问题描述 投票:0回答:2

假设我将此日期作为输入:

var _dateA = 2018-11-15T11:13:26.687Z

如果我在做什么,无论如何,

var _dateB = new Date(_date)

要么

var _dateB = moment(_date)

我得到这个结果==>

_dateB = Thu Nov 15 2018 12:13:26 GMT+0100 (heure normale d’Europe centrale)

我知道存在时区问题,但是如何获得Date对象或Moment对象,而不需要一个小时呢?

想要的结果=> Thu Nov 15 2018 11:13:26 GMT+0100

目前的结果=> Thu Nov 15 2018 12:13:26 GMT+0100

javascript date datetime timezone momentjs
2个回答
0
投票

您需要使用Date.toUTCString(),使用UTC时区将日期转换为字符串

var _dateA = '2018-11-15T11:13:26.687Z';
var _dateB = new Date(_dateA);
console.log(_dateB.toUTCString());

0
投票

当您通过Dateconsole.log()等“输出”alert()对象时,默认使用toString()方法,将日期对象转换为本地时区字符串进行显示(这就是您在当地时间看到日期的原因)。

不建议使用Date构造函数解析日期字符串(尽管我怀疑大多数浏览器可能会处理ISO 8601日期,就像问题中的那个,相当不错) - see the dateString parameter note here。因此,如果您需要构造日期对象以及输出日期字符串,那么您可以使用split()使用多个分隔符的正则表达式字符集解析ISO 8601字符串,然后使用new Date(Date.UTC(...))构造UTC日期对象。您也可以使用moment.js执行此操作,但下面应该更详细地说明发生了什么。

例如:

const text = '2018-11-15T11:13:26.687Z'

const [y, m, d, hh, mm, ss, ms] = text.split(/[-T:.Z]/);
const date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));

console.log(date.toLocaleString()); // date string in local timezone
console.log(date.toUTCString()); // UTC date string
console.log(JSON.stringify(date)); // ISO 8601 date string in most browsers
© www.soinside.com 2019 - 2024. All rights reserved.