2015-12-28 5 views
2

У меня есть токен времени от этого 14512768065185892 от PubNub.I нужно преобразовать этот токен времени в следующий формат dd/mm/yy.Конвертировать 17-значное точное время unix (UTC) на сегодняшний день fromat В javascript

Любой, пожалуйста, предоставьте один способ преобразования формата даты в формат даты.

Заранее спасибо

ответ

5

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

+0

Спасибо за этот великий Ответ !! – Kichu

+0

@RobG Не могли бы вы помочь мне? Я пытаюсь преобразовать timestamp 2016-02-11 03:31:18 в pubnub timestamp из 17-значного прецизионного времени unix (UTC) что-то вроде 13406746780720711, указанного в ссылке url, предоставленной pubnub https: //www.pubnub. com/docs/web-javascript/api-reference # history_example_2 –

+1

@ ShashankShah - разобрать строку для создания объекта Date (например, мой ответ [* здесь *] (http://stackoverflow.com/questions/35169209/javascript-date -parse-return-nan-in-mozilla-browser/35169689 # 35169689)), затем используйте * getTime *. Обратите внимание, что точность - целые миллисекунды, которые могут быть 0 (для 1970-01-01T00: 00: 00Z). – RobG

1

PubNub раз имеют дополнительные 7 цифр точности выше стандартных марок UNIX время (в секундах), так что первый шаг, чтобы разделить его на 10 . Это дает вам 1451276806, который, когда вы тестируете его в converter, вы получаете 12/28/2015 @ 4:26am (UTC) (используя откровенно странный (1) формат даты в США), поэтому это кажется разумным.

С точки зрения использования Javascript, чтобы сделать это, вы можете передать количество миллисекунд Date иметь объект инстанцированный для вас:

var dtobj = new Date(1451276806518); 

, имея в виду, что значение миллисекунды влечет за собой вы деля 10 (отсечение последних четырех цифр), а не 10 .

После того, как у вас есть объект даты, вы можете использовать стандартные методы, чтобы получить его в формате, который вы хотите, например:

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) Я клянусь, некоторые комиссии должны быть приняты наихудшие биты из всех форматов даты, чтобы указать, что нужно было отбросить, а затем некоторые другие комитет случайно принял это как рекомендацию. Излишне говорить, что я большой поклонник ISO 8601 :-)

+0

EMCAScript [* Date.prototype.toString *] (http://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.tostring) полностью зависит от реализации , поэтому ваш «комитет» - это кучка разработчиков, которые догадываются о том, что пользователи могут захотеть. Даже TC39 [* не может согласиться полностью принять ISO 8601 *] (https://github.com/tc39/ecma262/issues/87), довольно грустно. – RobG

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

Смежные вопросы