我有不同的时间戳和来自API的时区作为对象。例如:
{{'ts' : 1521311400000},
{'tz' : 'GMT+01:00'}}
如何使用toLocaleTimeString()
将时间戳转换为该时区的人类可读日期?我试图将options
对象中的时区作为timeZone
的值here传递,但我得到invalid time zone in DateTimeFormat()
错误,无法弄清楚正确的格式应该如何是。
答案 0 :(得分:2)
要在格式化日期时获得这种灵活性,您可能需要查看Moment和Moment Timezone。
答案 1 :(得分:1)
如果您想要其他选项,可以试试这个:
function init() {
function formatFixedTimeZone(ts, tz) {
let offsetStr = tz.replace(/:/g, '');
let reverseOffset = offsetStr.replace(/[-+]/, sign => sign === '+' ? '-' : '+');
let time = new Date(ts);
let timeStr = time.toUTCString().replace('GMT', reverseOffset);
time = new Date(Date.parse(timeStr));
timeStr = time.toLocaleString('en-US', {
timeZone: 'UTC', // Don't change this from UTC for other time zones.
weekday: 'short',
month: 'short',
day: 'numeric',
year: 'numeric',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
}) + ' ' + tz;
return timeStr;
}
let timeDisplay = document.getElementById('time');
function tick() {
let nowStr = formatFixedTimeZone(Date.now(), 'GMT+01:00');
timeDisplay.textContent = nowStr;
}
setInterval(tick, 1000);
}
此处的Plunker:http://plnkr.co/edit/Gk6SOLwpWqfoT5gHlCrb?p=preview
这显示了固定时区内当前时间的运行计数,但是我试图以这样的方式编写它,如果你没有使用当前时间,但ts和tz来自您的API的价值,根据您的需求和不同的输出格式来调整它不应该太难。