web-dev-qa-db-fra.com

date javascript en chaîne

Voici ce que je dois faire. 

Obtenez Date, convertissez-la en chaîne et transmettez-la à un utilitaire tiers. La réponse de la bibliothèque aura la date au format chaîne comme je l’ai passée. Donc, j'ai besoin de convertir la date en chaîne comme 20110506105524 (YYYYMMDDHHMMSS)

function printDate() {
    var temp = new Date();
    var dateStr = temp.getFullYear().toString() + 
                  temp.getMonth().toString() + 
                  temp.getDate().toString() +
                  temp.getHours().toString() + 
                  temp.getMinutes().toString() + 
                  temp.getSeconds().toString();

    debug (dateStr );
}

Le problème avec ci-dessus est que pour les mois 1 à 9, il imprime un chiffre. Comment puis-je le changer pour imprimer exactement 2 chiffres pour le mois, la date ...

50
Kiran

Vous devrez remplir avec "0" si c'est un chiffre & note getMonth renvoie 0..11 pas 1..12

function printDate() {
    var temp = new Date();
    var dateStr = padStr(temp.getFullYear()) +
                  padStr(1 + temp.getMonth()) +
                  padStr(temp.getDate()) +
                  padStr(temp.getHours()) +
                  padStr(temp.getMinutes()) +
                  padStr(temp.getSeconds());
    debug (dateStr );
}

function padStr(i) {
    return (i < 10) ? "0" + i : "" + i;
}
57
Alex K.

S'appuyant sur JQuery Datepicker , mais cela pourrait être fait facilement:

var mydate = new Date();
$.datepicker.formatDate('yy-mm-dd', mydate);
38
Stéphane

use this polyfill https://github.com/UziTech/js-date-format

var d = new Date("1/1/2014 10:00 am");
d.format("DDDD 'the' DS 'of' MMMM YYYY h:mm TT");
//output: Wednesday the 1st of January 2014 10:00 AM
4
Tony Brix

Un peu plus simple en utilisant regex et toJSON().

var now = new Date();
var timeRegex = /^.*T(\d{2}):(\d{2}):(\d{2}).*$/
var dateRegex = /^(\d{4})-(\d{2})-(\d{2})T.*$/
var dateData = dateRegex.exec(now.toJSON());
var timeData = timeRegex.exec(now.toJSON());
var myFormat = dateData[1]+dateData[2]+dateData[3]+timeData[1]+timeData[2]+timeData[3]

Ce qui au moment de l'écriture vous donne "20151111180924".

La bonne chose d'utiliser toJSON() est que tout est déjà rembourré.

1
Daniel Cerecedo

Peut-être est-il plus facile de convertir la Date en entier 20110506105524 puis de le convertir en chaîne:

function printDate() {
    var temp = new Date();
    var dateInt =
        ((((temp.getFullYear() * 100 + 
            temp.getMonth() + 1) * 100 + 
           temp.getDate()) * 100 +
          temp.getHours()) * 100 + 
         temp.getMinutes()) * 100 + 
        temp.getSeconds();

    debug ( '' + dateInt );  // convert to String
}

Lorsque temp.getFullYear() < 1000, le résultat sera un (ou plusieurs) chiffre plus court.

Attention: cela ne fonctionnera pas avec une précision de l'ordre de la milliseconde (c'est-à-dire 17 chiffres) car Number.MAX_SAFE_INTEGER vaut 9007199254740991, ce qui ne représente que 16 chiffres.

1
jammon

J'aime la réponse de Daniel Cerecedo en utilisant toJSON() et regex. Une forme encore plus simple serait:

var now = new Date();
var regex = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).*$/;
var token_array = regex.exec(now.toJSON());
// [ "2017-10-31T02:24:45.868Z", "2017", "10", "31", "02", "24", "45" ]
var myFormat = token_array.slice(1).join('');
// "20171031022445"
0
jammon