如何在JavaScript中将字符串日期编号转换为日期时间?

时间:2014-03-09 23:09:05

标签: javascript date-format

我有这种日期格式,我想在页面上正确显示格式:

var dt = "/Date(570333600000-0200)/";

我厌倦了尝试Date.parse()和变体,有人知道最好的方法来实现这个目标吗?

1 个答案:

答案 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);

Live Example | Source