javascript - 无效的日期出现在 Firefox 中 nodejs 的控制台中
问题描述
我正在尝试将日期格式转换为 javascript 中的另一种格式。
当前格式:2021 年 3 月 17 日,下午 2:23:24 所需格式:2021-03-17T14:23:24.000Z
如何在javascript中做到这一点?
在 chrome 中,使用 new Date() 可以正常工作,但在 Firefox 浏览器中无法正常工作。
解决方案
您可以将字符串解析为 Date 然后使用toISOString,但请注意内置解析器,请参阅为什么 Date.parse 给出不正确的结果?. 请注意,这也会将字符串解析为本地字符串,然后生成 UTC 时间戳。
或者,您可以手动解析字符串并重新格式化部分,它已经是 UTC,或者将其解析为本地并生成 UTC 时间戳,例如
// No Date object
// Reformat 3/17/2021, 2:23:24 PM as ISO 8601 assuming input is UTC
function reformatDate0(d) {
let [M, D, Y, h, m, s, ap] = d.trim().split(/\W+/);
let z = n => ('0'+n).slice(-2);
return `${Y}-${z(M)}-${z(D)}T${z((h%12) + (/am/i.test(ap)?0:12))}:${m}:${s}.000Z`;
}
console.log('0: ' + reformatDate0('3/17/2021, 2:23:24 PM'));
// Using a Date object, values as UTC
// Reformat 3/17/2021, 2:23:24 PM as ISO 8601 assuming input is UTC
function reformatDate1(d) {
let [M, D, Y, h, m, s, ap] = d.trim().split(/\W+/);
return new Date(
Date.UTC(Y, M-1, D, (h%12) + (/am/i.test(ap)?0:12), m, s)
).toISOString();
}
console.log('1: ' + reformatDate1('3/17/2021, 2:23:24 PM'));
// Using a Date object, values as local
// Reformat 3/17/2021, 2:23:24 PM as ISO 8601 assuming input is local
function reformatDate2(d) {
let [M, D, Y, h, m, s, ap] = d.trim().split(/\W+/);
return new Date(Y, M-1, D, (h%12) + (/am/i.test(ap)?0:12), m, s).toISOString();
}
console.log('2: ' + reformatDate2('3/17/2021, 2:23:24 PM'));
请注意,前两个将输入视为 UTC,最后将其视为本地,因此时间会根据输入日期和时间的主机时区偏移量进行偏移。
推荐阅读
- python - 从 .txt 文件分析构建字典
- vue.js - 使用 Quasar 框架在 iframe 中引用 HTML 文件
- mysql - MySQL从组的最后一行中减去第一行
- vue.js - Vue js - 商店分派后并非所有数据都显示
- c# - 为什么我收到状态为 500 的错误(内部服务器错误)
- javascript - Javascript:null==0 返回 false,但 null<1 返回 true。请解释
- ruby - 使用 split 方法创建具有多个单词的哈希
- python - numpy,对ndarray.base的理解
- reactjs - “预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段模式”如何解决 Apollo 的问题?
- reactjs - 不知道为什么这两个函数在 React 中显示为 undefined