将日期时间转换为ISO格式。

3

我有一个日期的格式是dd.MM.yyyy HH:mm:ss,需要将其转换为ISO格式,但转换不正确。以下是我的代码:

let date = '12.01.2016 0:00:00'; //12 January 2016
let parsedDate = moment(date, 'dd.MM.yyyy HH:mm:ss')
console.log(parsedDate.toISOString()); //result is 2016-12-31T23:00:00.000Z

示例2:

let date = '12.01.2016 0:00:00'; //12 January 2016
let parsedDate = new Date(date)
console.log(parsedDate.toISOString()); //result is 2016-11-30T23:00:00.000Z

问题出在哪里?为什么我得到了不同的结果?


考虑一下你所处的时区与格林尼治标准时间(GMT)之间的差异。对于我来说,作为生活在GMT时区的人来说,这段代码是正确的。--- 在第二个例子中,第一个报告了错误的年份。 - evolutionxbox
4个回答

3

您的格式参数有误,请使用'DD.MM.YYYY H:mm:ss'

没有小写的dd,请使用大写的DD表示月中的天数,使用大写的YYYY代替小写的yyyy表示年份。

请注意toISOString()

请注意,.toISOString()始终返回UTC时间戳,即使所涉及的时刻处于本地模式。这是为了与ES2015规范中的原生JavaScript Date.toISOString()规范保持一致。

let date = '12.01.2016 0:00:00'; //12 January 2016
let parsedDate = moment(date, 'DD.MM.YYYY H:mm:ss')
console.log(parsedDate.toISOString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>


1

我刚刚尝试使用moment.js,似乎你使用了类似于C#中使用的掩码。Moment.js在日期部分使用大写字母。

let date = '12.01.2016 0:00:00'; //12 January 2016
let parsedDate = moment(date, 'DD.MM.YYYY HH:mm:ss');
console.log(parsedDate.toISOString()); //result is 2016-01-11T23:00:00.000Z

Date.parse() 函数需要另一种类型的输入。


0
在第二个例子中,解析的日期结果为2016年12月1日0:00:00(GMT+1)。
当您输出toISOString()时,它会给出GMT时间,即比实际时间早1小时,因此是2016年11月30日23:00:00。

提前2小时? - evolutionxbox
@evolutionxbox 抱歉,1小时后编辑。对我来说是2个小时,因为我的时区不同。 - Alexandru Pupsa

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接