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

大兔子大兔子 提交于 2020-01-11 09:35:08

问题


I got time token like this from 14512768065185892 from PubNub.I need to convert this time token into following format dd/mm/yy.

Any one please provide one method to convert time stamp to date format.

Thanks In Advance


回答1:


The Date constructor can be passed a time value that is milliseconds since the epoch (1970-01-01T00:00:00Z). The value you have seems to have 4 digits too many, so just divide by 1e4 (or whatever value is appropriate):

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

There are plenty of questions and answers here on how to format the output as dd/mm/yy (which is a very ambiguous format), e.g.

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



回答2:


You can just remove the last 4 characters, and use this timestamp in Date constructor:

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

However, JS doesn't support "dd/mm/yyyy" format, and you will have to implement it yourself or use third-party libraries like Moment.js.

Here is the working demo:

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



回答3:


PubNub times have an extra 7 digits of precision above standard UNIX time stamps (seconds) so the first step is to divide it by 107. That gives you 1451276806 which, when you test it in a converter, you get 12/28/2015 @ 4:26am (UTC) (using the frankly bizarre(1) US date format) so it seems to be reasonable.

In terms of using Javascript to do this, you can pass the number of milliseconds to Date to have an object instantiated for you:

var dtobj = new Date(1451276806518);

keeping in mind that the millisecond value entails you dividing by 104 (lopping off the final four digits) rather than 107.

Once you have the date object, you can use standard methods to get it in the format you want, such as:

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) I swear some committee must have taken the worst bits from all date formats to indicate what needed to be discarded, then some other committee accidentally took that as a recommendation. Needless to say, I'm a big fan of ISO 8601 :-)



来源:https://stackoverflow.com/questions/34487986/convert-17-digit-precision-unix-time-utc-to-date-fromat-in-javascript

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!