我有这种日期格式,我想在页面上正确显示格式:
var dt = "/Date(570333600000-0200)/";
我厌倦了尝试Date.parse()和变体,有人知道最好的方法来实现这个目标吗?
答案 0 :(得分:3)
这看起来像是毫秒级以来的时代和时区的组合。 ("纪元"是1970年1月1日午夜,UTC。)
首先,你得到了部分:
var str = "/Date(570333600000-0200)/";
var parts = str.match(/Date\((\d+)([\-+])(\d{2})(\d{2})/);
// /^^^\/^^^^^\/^^^^^\/^^^^^\
// | | | \-- tz minutes
// | | \--------- tz hours
// | \---------------- plus or minus
// \---------------------- raw milliseconds value
现在,从毫秒开始构建一个日期 - 自上世纪部分很容易:
var msSinceTheEpoch = parseInt(parts[1], 10);
var dt = new Date(msSinceTheEpoch);
... 但是我们需要处理时区。 JavaScript的Date
对象只有UTC,"本地时间"。因此,在构建日期之前,我们最好将时区添加到毫秒值。
我猜测-0200
表示" UTC减去两小时",所以假设“为真”而-
可能是+
(对于"加上X ......"),我们得到了这个:
var hours = parseInt(parts[3], 10);
var minutes = parseInt(parts[4], 10);
var msOffset = ((hours * 60) + minutes) * 60 * 1000;
msSinceTheEpoch += parts[2] === "-" ? -msOffset : msOffset;
现在我们可以创建日期:
var dt = new Date(msSinceTheEpoch);