【发布时间】:2018-08-06 12:47:57
【问题描述】:
我从一个循环中的对象收到一个日期,格式如下:2018-08-06 20:45:00
而且我想在客户端的时区中只显示“20:45”(总是用两位数表示分钟)。我在 vue.js 的方法部分创建了这个方法:
ihaveadate(dateFromLoop) {
var d = new Date(dateFromLoop);
d.setTime(d.getTime() + new Date().getTimezoneOffset() * 60 * 1000);
var hour = d.getUTCHours();
var minutes = (d.getMinutes() < 10 ? "0" : "") + d.getMinutes();
return `${hour}:${minutes}`;
}
除了在 safari 上我有 NaN:NaN 之外,它似乎工作正常,有没有解决这个问题的干净方法?
在阅读了你的答案后,我做到了:
var dateFromLoop = '2018-08-06 20:45:00';
var date = Date.parse(dateFromLoop.replace(" ", "T"));
const daty = new Intl.DateTimeFormat({
hour: "numeric",
minute: "numeric"
}).format(date);
console.log(daty);
【问题讨论】:
-
您的解决方案在 Safari 中不起作用,对我来说它返回“07/08/2018”。时间戳“2018-08-06 20:45:00”没有关联的时区,因此无论主机的时区如何,时间都应始终为“20:45”。但是 Safari 的解析器有问题,“2018-08-06T20:45:00”将被视为 UTC,而不是本地,所以不要相信它。您的答案代码无法编译,它有语法错误和错误。
-
因为我只收到 2018-08-06 20:45:00 我这样做了: const loopy = dateFromLoop.replace(" ", "T") + ".000+02:00"; var date = Date.parse(loopy); const 日期 = new Intl.DateTimeFormat(locale, { 小时:“数字”,分钟:“数字”}).format(date);返回日期;
标签: javascript date datetime vue.js