javascript - 如何在 JavaScript 中将字符串日期数字转换为日期时间?

标签 javascript date-format

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

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

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

最佳答案

这看起来像是自纪元以来的毫秒数和时区的组合。 (“纪元”是 UTC 时间 1970 年 1 月 1 日午夜。)

首先,你得到零件:

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 减去两小时”,因此假设这是真的,并且 - 可能是 + (对于“plus 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

关于javascript - 如何在 JavaScript 中将字符串日期数字转换为日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22289474/

相关文章:

通过预签名 URL 将文件上传到 AWS S3 时,Javascript 不起作用

java-8 - Java 8 DateTimeFormatter 两位数的年份 18 解析为 0018 而不是 2018?

Java json 响应以数值形式显示日期

javascript - 在 Angular JS 中从另一个 Controller 触发一个 Controller 中的服务调用

JavaScript 部分文件加载顺序与代码中的顺序不同

datetime - 需要帮助将 Sybase 中的字符串转换为日期格式

java - java DateFormat 问题

"args"中的 Java 日期格式

javascript - 无法在不同域上设置 cookie

javascript - jquery 与另一个库冲突