在根据navigator.language将ISO字符串解析为本地时间戳后,我一直在尝试显示本地日期和时间。
let sampleDate = new Date('2018-11-29T09:54:46.863207Z').toLocaleString(navigator.language);
因此,当我更改浏览器语言首选项时,它会以适当的语言环境反映日期格式,但这似乎不适用于ISO字符串的时间部分。
浏览器区域设置en-AU
-- Data Last Updated at 29/11/2018, 3:24:46 pm
的结果
浏览器区域设置en-US
- Data Last Updated at 11/29/2018, 3:24:46 pm
的结果
了解日期格式如何根据区域设置进行更改。它似乎不会影响ISO 8601字符串的时间组件。
我已经尝试使用moment.js以浏览器语言环境格式显示日期和时间,但没有找到太多成功。
我在这里错过了什么吗?
看起来您正在尝试获取UTC日期字符串,将其转换为客户端浏览器的本地日期和时间,并根据区域设置格式化日期。你可能会过度思考它,因为只要你正确地创建了Date
对象,JavaScript就会为你做大部分工作。
不建议使用new Date()
构造函数解析日期字符串,因此下面的代码示例使用一个小的正则表达式并解压缩来解析日期字符串,然后您可以使用new Date(Date.UTC(...))
创建UTC的日期。此时,JavaScript将自动在客户端浏览器的本地日期和时间中表示日期对象,然后您可以使用toLocaleString()
为客户端浏览器的语言环境应用格式。例如:
const s = '2018-11-29T09:54:46.863207Z';
let [y, m, d, hh, mm, ss, ms] = s.match(/\d+/g);
let date = new Date(Date.UTC(y, m - 1, d, hh, mm, ss, ms));
let formatted = date.toLocaleString();
console.log(formatted);