Comment convertir une date en horodatage?

165

Je veux convertir la date en horodatage, mon entrée est 26-02-2012. j'ai utilisé

new Date(myDate).getTime();

Il dit NaN .. Quelqu'un peut-il dire comment convertir cela?

selladurai
la source
duplication possible de stackoverflow.com/questions/9343971/…
Bogdan Emil Mariesan
vous pouvez jeter un oeil à la bibliothèque date.js
rsbarro
1
Avez-vous utilisé Date(myDate).getTime()(ce que vous avez marqué comme code) ou est-ce que le mot «nouveau» avant il est censé faire partie du code? Plus vous déployez d'efforts, meilleures seront les réponses que vous obtiendrez.
TJ Crowder
@rsbarro: Sauf que cela ne semble plus être maintenu (et il y a des bugs remarquables). MomentJS semble assez bon, cependant.
TJ Crowder
@TJCrowder J'ai utilisé date.js et cela a fonctionné pour ce pour quoi j'avais besoin, mais vous avez raison, il n'a pas été activement travaillé depuis un certain temps. Je vais vérifier momentjs. Merci!
rsbarro

Réponses:

203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Mettre à jour:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (testé dans Chrome, FF, Opera, IE et Safari).

L'Alpha
la source
Malheureusement, cela ne fonctionne pas dans Safari5, car il revient NaN. Dans Safari, vous devez utiliser l'autre constructeur possible new Date(year, month, day);, concernant cet exemple:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere
13
Au lieu de convertir la chaîne de date du format «européen» au format «américain», il est préférable de la convertir au format ISO 8601 ( YYYY-MM-DD), qui est garanti d'être compris par Date()et est, en général, le format le plus interopérable pour les chaînes de date.
Walter Tross
3
Remarque: new Date(newDate).getTime()produira un horodatage en résolution milliseconde.
h7r
3
Pour les secondes, utilisez: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum
54

Essayez cette fonction, elle utilise la méthode Date.parse () et ne nécessite aucune logique personnalisée:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));
Ketan Savaliya
la source
25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
Diode
la source
24

ce code refactorisé le fera

let toTimestamp = strDate => Date.parse(strDate)

cela fonctionne sur tous les navigateurs modernes sauf ie8-

Jalasem
la source
10

Ici, nous avons deux problèmes. Tout d'abord, vous ne pouvez appeler getTime que sur une instance de la date. Vous devez mettre la nouvelle date entre crochets ou l'attribuer à une variable.

Deuxièmement, vous devez lui transmettre une chaîne dans un format approprié.

Exemple de travail:

(new Date("2012-02-26")).getTime();
Alan Bogu
la source
1
Il n'est pas nécessaire de placer l'instant de date dans une parenthèse. Seul un format de chaîne approprié est requis.
maswerdna
5

Il vous suffit d'inverser votre chiffre de date et de le changer -avec ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

Dans ton cas:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

La localisation PS UK n'a pas d'importance ici.

Antonjs
la source
Ce format de date est également invalide et ne fonctionnera pas de manière fiable entre les navigateurs et les paramètres régionaux (ce n'est pas le cas, par exemple, pour moi dans Chrome avec les paramètres régionaux du Royaume-Uni). Si vous voulez suggérer un format, suggérez-en un qui fonctionne réellement.
TJ Crowder
J'obtiens l'exemple de developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . J'ai juste oublié de ranger la ficelle. Maintenant ça marche.
antonjs
2
D'accord, au moins maintenant, le code ci-dessus n'utilise pas un format de date invalide - il donne simplement la mauvaise date, pour deux raisons distinctes. Ci-dessus, vous avez défini la date du 2 mars 2014 (l'ordre des champs est en désordre) Et si les champs étaient dans le bon ordre, vous définiriez la date du 26 mars 2012 (les valeurs des mois commencent à zéro). Mais comme l'OP a une chaîne, pas une série de nombres, ce n'est pas très utile même si vous avez résolu ces problèmes.
TJ Crowder
@TJ Crowder merci pour vos suggestions. J'ai corrigé le code comme vous l'avez dit en convertissant la chaîne en un nombre. Merci.
antonjs
2
Le premier exemple de code est toujours erroné et l'utilisation Numberde chaînes commençant par a 0est problématique sur certains moteurs - utilisez parseIntet spécifiez une base.
TJ Crowder
5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}
deepakssn
la source
4

Pour convertir la date (ISO) en horodatage Unix , je me suis retrouvé avec un horodatage 3 caractères plus long que nécessaire, donc mon année était d'environ 50k ...

J'ai dû le diviser par 1000: new Date('2012-02-26').getTime() / 1000

Orszaczky
la source
3

Pour ceux qui souhaitent avoir un horodatage lisible au format de, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Exemple d'utilisation: une extension de fichier de sauvegarde. /my/path/my.file.js.20190220

allenhwkim
la source
3

Si vous êtes venu ici à la recherche de l' horodatage actuel

  var date      = new Date();
  var timestamp = date.getTime();

TLDR:

new Date().getTime();
//console.log(new Date().getTime());
TimeTrax
la source
2

Votre chaîne n'est pas dans un format que l' Dateobjet est spécifié pour gérer . Vous devrez l'analyser vous-même, utiliser une bibliothèque d'analyse de date comme MomentJS ou l'ancienne (et non actuellement maintenue, pour autant que je sache ) DateJS , ou la masser dans le bon format (par exemple 2012-02-29) avant de demander Dateà l'analyser .

Pourquoi vous obtenez NaN: Lorsque vous demandez new Date(...)de gérer une chaîne non valide, elle renvoie un Dateobjet qui est défini sur une date non valide ( new Date("29-02-2012").toString()retourne "Invalid date"). L'appel getTime()d'un objet date dans cet état retourne NaN.

TJ Crowder
la source
@benvds: Cool, merci. Bien que je trouve le commentaire "En outre, il est non destructif pour le DOM" un peu étrange ... Je suppose que ce qu'ils voulaient dire, c'est que cela ne change pas l' Dateobjet (ce qui n'a rien à voir avec le DOM).
TJ Crowder
2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}
Evgeniy
la source
0

Des réponses ont été fournies par d'autres développeurs, mais à ma manière, vous pouvez le faire à la volée sans créer de fonction définie par l'utilisateur comme suit:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Frédéric Eze
la source