Как преобразовать временную метку unix в календарную дату moment.js


150

У меня есть временная метка unix, и я пытаюсь преобразовать ее в календарную дату, например MM/DD/YYYY. Пока у меня есть это:

$(document).ready(function() {
  var value = $("#unixtime").val(); //this retrieves the unix timestamp
  var dateString = moment(value).calendar(); 
  alert(dateString);
});

Когда я пытаюсь распечатать календарную дату, в окне появляется сообщение «Недействительная дата». Может кто-нибудь мне помочь?

Ответы:


391

Используя moment.js, как вы просили, есть unixметод, который принимает временные метки unix в секундах:

var dateString = moment.unix(value).format("MM/DD/YYYY");

3
Это не календарная дата.
Ян Уорбертон,

1
@IanWarburton - это не так ??
Мэтт Джонсон-Пинт,

Я полагаю, это в соответствии с вопросом. Но я думаю, что календарная дата в moment.js выглядит так .... moment (new Date (item.date)). Calendar ()
Ян Уорбертон,

5
@IanWarburton - вам не понадобится новый объект даты. calendarФункция хорошие ( документы здесь ), но не в том формате , что ОП просили.
Мэтт Джонсон-Пинт,

3
Стоит отметить, почему вопрос не работает, но это работает. Причина заключается в том, потому что monent(number) ожидает отметку времени UNIX в милли секунд (что согласуется с Dateобъектом), в то время как временная метка Unix в секундах по умолчанию. Так что вы также можете сделать moment(value*1000)вместо moment.unix(value), но использование unixболее понятное.
icc97,

39

Временная метка UNIX - это количество секунд с 1970 года, поэтому вам нужно преобразовать ее в объект JS Date:

var date = new Date(unixTimestamp*1000);

Да, это было решение с последней версией момента, или, по крайней мере, с той, которую я недавно получил от npm. хотя я получил .unix () с того момента, когда мне пришлось * 1000 при повторном создании экземпляра. например: moment (moment (). unix () * 1000)
kroe

Лучший ответ по сравнению с логикой moment.js
Андрис


4
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()

10
Хотя этот код может ответить на вопрос, было бы лучше включить некоторый контекст, объяснить, как он работает, и описать, когда его использовать. Ответы, содержащие только код, в конечном итоге бесполезны. Кроме того, ваш код неправильно отформатирован.
ryanyuyu

4

Может быть, немного поздно, но для новых проблем, подобных этой, я использую этот код:

moment(timestamp, 'X').format('lll');

Вы можете изменить формат в соответствии со своими потребностями, а также добавить часовой пояс следующим образом:

moment(timestamp, 'X').tz(timezone).format('lll');

1
Это лучший метод, который я видел здесь.
LukeVenter

1
Просто чтобы добавить к этому ответу (это самый правильный ответ здесь). Используйте строчные буквы xдля отметки времени ms unix. Документация здесь
JonTroncoso




0
$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment(value, 'MM/DD/YYYY', false).calendar(); 
    alert(dateString);
});

Есть строгий режим и режим прощения .

Хотя строгий режим работает лучше в большинстве ситуаций, режим прощения может быть очень полезен, когда формат строки, передаваемой в момент, может отличаться.

В более поздних версиях парсер по умолчанию будет использовать строгий режим. Строгий режим требует, чтобы ввод на данный момент точно соответствовал указанному формату, включая разделители. Строгий режим устанавливается путем передачи true в качестве третьего параметра функции момента.

Типичный сценарий, в котором режим прощения полезен, - это ситуации, когда сторонний API предоставляет дату, и формат даты для этого API может измениться. Предположим, что API начинает с отправки дат в формате «ГГГГ-ММ-ДД», а затем переходит в формат «ММ / ДД / ГГГГ».

В строгом режиме следующий код приводит к отображению «Invalid Date»:

moment('01/12/2016', 'YYYY-MM-DD', true).format()
"Invalid date"

В режиме прощения с использованием строки формата вы получаете неправильную дату:

moment('01/12/2016', 'YYYY-MM-DD').format()
"2001-12-20T00:00:00-06:00"

другой способ был бы

$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment.unix(value).calendar(); 
    alert(dateString);
});


0

Эта функция создает дату из отметки времени:

    function formatDateTime(dateString) {
        const parsed = moment(new Date(dateString))

        if (!parsed.isValid()) {
            return dateString
        }

        return parsed.format('MMM D, YYYY, HH:mmA')
    }

0
moment(timestamp).format('''any format''')

3
Хотя этот код может решить проблему OP, лучше всего включить объяснение того, как ваш код решает проблему OP. Таким образом, будущие посетители могут узнать из вашего сообщения и применить его к своему собственному коду. SO - это не сервис кодирования, а ресурс знаний. Кроме того, больше шансов получить качественные и полные ответы. Эти функции, наряду с требованием, чтобы все сообщения были автономными, являются одними из сильных сторон SO как платформы, которые отличает ее от форумов. Вы можете редактировать, чтобы добавить дополнительную информацию и / или дополнить свои пояснения исходной документацией.
ysf
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.