将 17 位精度 unix 时间 (UTC) 转换为日期格式 In javascript

Convert 17-digit precision unix time (UTC) to date fromat In javascript

我从 14512768065185892 从 PubNub.I 得到了这样的时间令牌,需要将此时间令牌转换为以下格式 dd/mm/yy.

任何人请提供一种将时间戳转换为日期格式的方法。

提前致谢

Date constructor 可以传递一个时间值,该值是自纪元 (1970-01-01T00:00:00Z) 以来的毫秒数。您的值似乎多了 4 位数,所以只需除以 1e4(或任何合适的值):

var timeValue = 14512768065185892;
document.write(new Date(timeValue/1e4));

这里有很多关于如何将输出格式化为 dd/mm/yy(这是一种非常模糊的格式)的问题和答案,例如

function formatDMYY(d) {
  function z(n){return (n<10?'0':'') + n}
  return z(d.getDate()) + '/' + z(d.getMonth() + 1) + '/' + z(d.getFullYear()%1e3);
}

document.write(formatDMYY(new Date(14512768065185892/1e4)));

PubNub 时间比标准 UNIX 时间戳(秒)多 7 位精度,因此第一步是将其除以 107。这给你 1451276806 ,当你在 converter 中测试它时,你会得到 12/28/2015 @ 4:26am (UTC) (使用坦率的奇怪 (1) 美国日期格式) 这样看来也有道理。

就使用 Javascript 执行此操作而言,您可以将毫秒数传递给 Date 以便为您实例化一个对象:

var dtobj = new Date(1451276806518);

请记住,毫秒 值需要除以 104(去掉最后四位数字)而不是 107.

一旦你有了日期对象,你可以使用标准方法以你想要的格式获取它,例如:

var dtobj = new Date(1451276806518);
var dtdd = ('0' + (dtobj.getDate())).slice(-2);
var dtmm = ('0' + (dtobj.getMonth() + 1)).slice(-2);
var dtyy = ('0' + (getFullYear() % 100)).slice(-2);

document.write(dtdd + "/" + dtmm + "/" + dtyy);

(1) 我发誓某些委员会必须从所有日期格式中提取最差的位来指示需要丢弃的内容,然后 other 委员会不小心将其作为建议。不用说,我是 ISO 8601 的忠实粉丝:-)

您可以只删除最后 4 个字符,并在 Date 构造函数中使用此时间戳:

new Date(+str.substr(0, str.length - 4))  

但是JS不支持"dd/mm/yyyy"格式,需要自己实现或者使用Moment.js.

等第三方库

这是工作演示:

Date.parsePubNub = function(str) {
    return new Date(+str.substr(0, str.length - 4));
};

Date.prototype.toDDMMYYYY = function()
{
  return ("0" + this.getDate()).slice(-2) + "/" + ("0" + (this.getMonth() + 1)).slice(-2) + "/" + this.getFullYear();
};

var str = "14512768065185892";
document.body.innerText = Date.parsePubNub(str).toDDMMYYYY();