Comment convertir l'horodatage Unix en date du calendrier moment.js


141

J'ai un horodatage unix, et j'essaie de le convertir en une date de calendrier telle que MM/DD/YYYY. Jusqu'à présent, j'ai ceci:

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

Lorsque j'essaye d'imprimer la date du calendrier, la fenêtre indique "Date invalide". Quelqu'un peut m'aider?

Réponses:


364

En utilisant moment.js comme vous l'avez demandé, il existe une unixméthode qui accepte les horodatages Unix en secondes:

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

3
Ce n'est pas une date de calendrier.
Ian Warburton le

1
@IanWarburton - ce n'est pas ??
Matt Johnson-Pint

Je suppose que c'est conforme à la question. Mais je pense qu'une date de calendrier dans moment.js ressemble à ceci .... moment (new Date (item.date)). Calendar ()
Ian Warburton

5
@IanWarburton - Vous n'auriez pas besoin du nouvel objet de date. La calendarfonction est agréable ( docs ici ), mais pas dans le format demandé par l'OP.
Matt Johnson-Pint

1
Il convient de noter pourquoi la question échoue, mais cela fonctionne. La raison en est que monent(number) s'attend à un horodatage unix en milli secondes (ce qui est cohérent avec l' Dateobjet), alors que l'horodatage unix est en secondes par défaut. Vous pouvez donc aussi faire à la moment(value*1000)place de moment.unix(value), mais l'utilisation unixest plus claire.
icc97

39

L'horodatage UNIX correspond au nombre de secondes à partir de 1970, vous devez donc le convertir en objet Date JS:

var date = new Date(unixTimestamp*1000);

Oui, c'était la solution avec la dernière version de moment, ou du moins celle que j'ai obtenue récemment de npm. même si j'ai eu le .unix () à partir du moment où je devais * 1000 lors de l'instanciation à nouveau. par exemple: moment (moment (). unix () * 1000)
kroe

Meilleure réponse par rapport à la logique moment.js
Andris

19

Moment.js fournit des formats localisés qui peuvent être utilisés.

Voici un exemple:

const moment = require('moment');

const timestamp = 1519482900000;
const formatted = moment(timestamp).format('L');

console.log(formatted); // "02/24/2018"

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

9
Bien que ce code puisse répondre à la question, il serait préférable d'inclure un contexte, d'expliquer comment il fonctionne et de décrire quand l'utiliser. Les réponses basées uniquement sur le code ne sont pas utiles à long terme. En outre, votre code n'est pas correctement formaté.
ryanyuyu


3

Peut-être un peu en retard, mais pour de nouveaux problèmes comme celui-ci, j'utilise ce code:

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

Vous pouvez modifier le format en fonction de vos besoins et également ajouter un fuseau horaire comme celui-ci:

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

1
C'est la meilleure méthode que j'ai vue ici.
LukeVenter le

1
Juste pour ajouter à cette réponse (qui est la réponse la plus correcte ici). Utilisez des minuscules xpour l'horodatage ms unix. Documentation ici
JonTroncoso

0

Je l'ai corrigé comme cet exemple.

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

Il existe un mode strict et un mode pardonnant .

Alors que le mode strict fonctionne mieux dans la plupart des situations, le mode indulgent peut être très utile lorsque le format de la chaîne passée au moment peut varier.

Dans une version ultérieure, l'analyseur utilisera par défaut le mode strict. Le mode strict nécessite que l'entrée au moment corresponde exactement au format spécifié, séparateurs compris. Le mode strict est défini en passant true comme troisième paramètre à la fonction moment.

Un scénario courant où le mode indulgent est utile est dans les situations où une API tierce fournit la date et le format de date pour cette API pourrait changer. Supposons qu'une API commence par envoyer des dates au format «AAAA-MM-JJ», puis passe ultérieurement au format «MM / JJ / AAAA».

En mode strict, le code suivant entraîne l'affichage de `` Date invalide '':

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

En mode indulgent en utilisant une chaîne de format, vous obtenez une date erronée:

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

une autre façon serait

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

0

Cette fonction crée la date à partir de l'horodatage:

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

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

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

0
moment(1454521239279).toDate()
moment(1454521239279).format()

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

3
Bien que ce code puisse résoudre le problème du PO, il est préférable d'inclure une explication sur la façon dont votre code résout le problème du PO. De cette manière, les futurs visiteurs peuvent apprendre de votre publication et l'appliquer à leur propre code. SO n'est pas un service de codage, mais une ressource de connaissances. De plus, les réponses complètes et de haute qualité sont plus susceptibles d'être votées. Ces fonctionnalités, ainsi que l'exigence que tous les messages soient autonomes, sont quelques-unes des forces de SO en tant que plate-forme, qui le différencie des forums. Vous pouvez modifier pour ajouter des informations supplémentaires et / ou pour compléter vos explications avec la documentation source.
ysf le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.