Як конвертувати часову позначку unix в дату календаря moment.js


141

У мене є часова мітка Unix, і я намагаюся перетворити її в дату календаря, наприклад MM/DD/YYYY. Поки що я маю це:

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

Коли я намагаюся роздрукувати дату календаря, у вікні пишеться "Недійсна дата". Хтось може мені допомогти?

Відповіді:


364

Використовуючи moment.js за вашим запитом, існує unixметод, який приймає часові позначки unix за секунди:

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

3
Це не календарна дата.
Ян Варбуртон

1
@IanWarburton - це не ??
Метт Джонсон-Пінт

Я гадаю, це відповідно до питання. Але я думаю, що дата календаря в moment.js виглядає приблизно так ... момент (нова дата (item.date)). Календар ()
Ian Warburton

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

1
Варто зазначити, чому питання не вдається, але це працює. Причина полягає в тому, що 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 при інстанціюванні. наприклад: момент (момент (). unix () * 1000)
крое

Найкраща відповідь порівняно з логікою moment.js
Андріс,


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

9
Хоча цей код може відповісти на питання, було б краще включити якийсь контекст, пояснити, як він працює, та описати, коли ним користуватися. Відповіді, що стосуються лише коду, не є корисними в довгостроковій перспективі. Крім того, ваш код неправильно відформатований.
рянюю


3

Можливо, трохи пізно, але для нових питань, таких як цей, я використовую цей код:

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

Ви можете змінити формат відповідно до своїх потреб, а також додати часовий пояс таким:

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

1
Це найкращий метод, який я тут бачив.
LukeVenter

1
Просто додати до цієї відповіді (що тут є найбільш правильною відповіддю). Використовуйте малі регістри xдля часової позначки ms unix. Документація тут
JonTroncoso

0

Я це зафіксував, як на цьому прикладі.

$scope.myCalendar = new Date(myUnixDate*1000);
<input date-time ng-model="myCalendar" format="DD/MM/YYYY" />

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 починається з надсилання дат у форматі "РРРР-MM-DD", а потім пізніше змінюється у форматі "MM / DD / РРРР".

У суворому режимі відображається наступний код: "Недійсна дата":

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
Хоча цей код може вирішити проблему з ОП, найкраще включити пояснення щодо того, як ваш код вирішує проблему ОП. Таким чином майбутні відвідувачі можуть дізнатисясь із вашої публікації та застосувати її до власного коду. ТАК - це не програма кодування, а ресурс для знань. Крім того, швидше за все буде запрошено високу якість, повну відповідь. Ці функції, поряд з вимогою, що всі повідомлення є автономними, є деякою сильною стороною SO як платформи, що відрізняє її від форумів. Ви можете редагувати, щоб додати додаткову інформацію та / або доповнити свої пояснення джерельною документацією.
ysf
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.