将17位精度unix时间(UTC)转换为datemat in javascript

时间:2015-12-28 05:13:07

标签: javascript pubnub

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

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

提前致谢

3 个答案:

答案 0 :(得分:6)

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)));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

PubNub时间比标准UNIX时间戳(秒)具有额外7位数的精度,因此第一步是将其除以10 7 。这会为您1451276806提供12/28/2015 @ 4:26am (UTC),当您在converter中对其进行测试时,您会得到Date(使用坦率奇怪的(1)美国日期格式)似乎是合理的。

在使用Javascript执行此操作方面,您可以将毫秒数传递给var dtobj = new Date(1451276806518); 以便为您实例化对象:

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

请记住,毫秒值需要除以10 4 (砍掉最后四位数)而不是10 7

获得日期对象后,您可以使用标准方法以您想要的格式获取它,例如:

<script src="../node_modules/es6-shim/es6-shim.js"></script>

(1)我发誓一些委员会必须采取所有日期格式中最糟糕的位来表明需要丢弃的内容,然后一些其他委员会意外地将其视为推荐。不用说,我是ISO 8601的忠实粉丝: - )

答案 2 :(得分:1)

您可以删除最后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();