Comment obtenir datetime en JavaScript?

Réponses:

155

Sémantiquement, vous recherchez probablement le one-liner

new Date().toLocaleString()

qui formate la date dans les paramètres régionaux de l'utilisateur.

Si vous recherchez vraiment un moyen spécifique de formater les dates, je vous recommande la bibliothèque moment.js .

Andrew Mao
la source
3
Merci d'avoir recommandé la bibliothèque moment.js; c'est fantastique.
carbontwelve
3
Personne ne devrait écrire son propre code de date / heure (comme dans certaines des autres réponses). Le nombre de cas de coin est stupéfiant. Allez voir la page de test unitaire pour moment.js ( momentjs.com/tests ) - il y a 66701 tests! Utilisez-le, c'est génial. Ou trouvez une autre bibliothèque, mais n'écrivez pas votre propre code pour cela, vous manquerez très probablement quelque chose (j'ai gâché ça royalement dans le passé).
sidewinderguy
1
Je ne comprends pas pourquoi il était si difficile de trouver une réponse en une ligne comme celle-ci qui fonctionne. Merci.
timhc22
46

Si le format est "fixe", ce qui signifie que vous n'avez pas à utiliser un autre format, vous pouvez avoir du JavaScript pur au lieu d'utiliser toute la bibliothèque pour formater la date:

//Pad given value to the left with "0"
function AddZero(num) {
    return (num >= 0 && num < 10) ? "0" + num : num + "";
}

window.onload = function() {
    var now = new Date();
    var strDateTime = [[AddZero(now.getDate()), 
        AddZero(now.getMonth() + 1), 
        now.getFullYear()].join("/"), 
        [AddZero(now.getHours()), 
        AddZero(now.getMinutes())].join(":"), 
        now.getHours() >= 12 ? "PM" : "AM"].join(" ");
    document.getElementById("Console").innerHTML = "Now: " + strDateTime;
};
<div id="Console"></div>

La variable strDateTimecontiendra la date / heure dans le format que vous désirez et vous devriez pouvoir la modifier assez facilement si vous en avez besoin.

J'utilise joincomme bonne pratique, rien de plus, c'est mieux que d'ajouter des chaînes ensemble.

Shadow Wizard est une oreille pour vous
la source
@Jens oui, c'est à peu près aussi standard que possible, difficile de croire qu'un navigateur aura une syntaxe différente pour les méthodes de base de date / heure. :)
Shadow Wizard est une oreille pour vous
2
excellente solution, également pour utiliser le format, permutez simplement les instructions AddZero (now.getDate ()) et AddZero (now.getMonth () + 1) et ajustez les heures pour être, 12 si 0 et -12 si> 12. Bonne chance et merci pour la solution
Gent
votre code doit renvoyer 14h45 au lieu de 14h45. J'ai donc un peu modifié votre code: function getNowDateTimeStr () {var now = new Date (); var heure = now.getHours () - (now.getHours ()> = 12? 12: 0); return [[AddZero (now.getDate ()), AddZero (now.getMonth () + 1), now.getFullYear ()]. ​​join ("/"), [AddZero (hour), AddZero (now.getMinutes () )]. join (":"), now.getHours ()> = 12? "PM": "AM"]. Join (""); } // Remplissez la valeur donnée vers la gauche avec la fonction "0" AddZero (num) {return (num> = 0 && num <10)? "0" + num: num + ""; }
dalmate le
22
var now = new Date();

now.format("dd/MM/yyyy hh:mm TT");

Obtenez tous les détails ici: Flagrant Badassery »Format de date JavaScript

Arche
la source
J'ai déjà essayé ce blog, et l'heure est affichée comme 20/50/2011 12:01 TT
nimi
2
Les m sont faux. Basculez le haut en bas, vous avez la minute où le mois devrait être et vice-versa.
Quibblesome du
9

Date().toLocaleString() renvoie ceci: 7/31/2018, 12:58:03 PM

Assez proche - déposez simplement la virgule et les secondes:

new Date().toLocaleString().replace(",","").replace(/:.. /," ");

Résultats: 7/31/2018 12:58 PM

user1274820
la source
5
function pad_2(number)
{
     return (number < 10 ? '0' : '') + number;
}

function hours(date)
{
    var hours = date.getHours();
    if(hours > 12)
        return hours - 12; // Substract 12 hours when 13:00 and more
    return hours;
}

function am_pm(date)
{
    if(date.getHours()==0 && date.getMinutes()==0 && date.getSeconds()==0)
        return ''; // No AM for MidNight
    if(date.getHours()==12 && date.getMinutes()==0 && date.getSeconds()==0)
        return ''; // No PM for Noon
    if(date.getHours()<12)
        return ' AM';
    return ' PM';
}

function date_format(date)
{
     return pad_2(date.getDate()) + '/' +
            pad_2(date.getMonth()+1) + '/' +
            (date.getFullYear() + ' ').substring(2) +
            pad_2(hours(date)) + ':' +
            pad_2(date.getMinutes()) +
            am_pm(date);
}

Code corrigé du 3 septembre 2012 à 10:11

Opty
la source
Vérifie ton travail. J'ai essayé ceci et j'ai obtenu "03/06/112 05:02 PM" comme sortie. La seule chose correcte est le temps. La date, le mois et (évidemment) l'année sont tous incorrects.
Muhd
5

Vous pouvez convertir la date dans presque tous les formats à l'aide de l' extrait que j'ai ajouté ci-dessous.

Code:

dateFormat(new Date(),"dd/mm/yy h:MM TT")
//"20/06/14 6:49 PM"

Autres exemples

// Can also be used as a standalone function
dateFormat(new Date(), "dddd, mmmm dS, yyyy, h:MM:ss TT");
// Saturday, June 9th, 2007, 5:46:21 PM

dateFormat(new Date(),"dddd d mmmm yyyy")
//Monday 2 June 2014"

Extrait :

Ajoutez le code suivant extrait de ce lien dans votre code.

var dateFormat = function () {
    var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
        timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
        timezoneClip = /[^-+\dA-Z]/g,
        pad = function (val, len) {
            val = String(val);
            len = len || 2;
            while (val.length < len) val = "0" + val;
            return val;
        };

    // Regexes and supporting functions are cached through closure
    return function (date, mask, utc) {
        var dF = dateFormat;

        // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
        if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
            mask = date;
            date = undefined;
        }

        // Passing date through Date applies Date.parse, if necessary
        date = date ? new Date(date) : new Date;
        if (isNaN(date)) throw SyntaxError("invalid date");

        mask = String(dF.masks[mask] || mask || dF.masks["default"]);

        // Allow setting the utc argument via the mask
        if (mask.slice(0, 4) == "UTC:") {
            mask = mask.slice(4);
            utc = true;
        }

        var _ = utc ? "getUTC" : "get",
            d = date[_ + "Date"](),
            D = date[_ + "Day"](),
            m = date[_ + "Month"](),
            y = date[_ + "FullYear"](),
            H = date[_ + "Hours"](),
            M = date[_ + "Minutes"](),
            s = date[_ + "Seconds"](),
            L = date[_ + "Milliseconds"](),
            o = utc ? 0 : date.getTimezoneOffset(),
            flags = {
                d:    d,
                dd:   pad(d),
                ddd:  dF.i18n.dayNames[D],
                dddd: dF.i18n.dayNames[D + 7],
                m:    m + 1,
                mm:   pad(m + 1),
                mmm:  dF.i18n.monthNames[m],
                mmmm: dF.i18n.monthNames[m + 12],
                yy:   String(y).slice(2),
                yyyy: y,
                h:    H % 12 || 12,
                hh:   pad(H % 12 || 12),
                H:    H,
                HH:   pad(H),
                M:    M,
                MM:   pad(M),
                s:    s,
                ss:   pad(s),
                l:    pad(L, 3),
                L:    pad(L > 99 ? Math.round(L / 10) : L),
                t:    H < 12 ? "a"  : "p",
                tt:   H < 12 ? "am" : "pm",
                T:    H < 12 ? "A"  : "P",
                TT:   H < 12 ? "AM" : "PM",
                Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
                o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
                S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
            };

        return mask.replace(token, function ($0) {
            return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
        });
    };
}();

// Some common format strings
dateFormat.masks = {
    "default":      "ddd mmm dd yyyy HH:MM:ss",
    shortDate:      "m/d/yy",
    mediumDate:     "mmm d, yyyy",
    longDate:       "mmmm d, yyyy",
    fullDate:       "dddd, mmmm d, yyyy",
    shortTime:      "h:MM TT",
    mediumTime:     "h:MM:ss TT",
    longTime:       "h:MM:ss TT Z",
    isoDate:        "yyyy-mm-dd",
    isoTime:        "HH:MM:ss",
    isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
    isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
    dayNames: [
        "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
        "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    ],
    monthNames: [
        "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
        "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
    ]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
    return dateFormat(this, mask, utc);
};
Harpreet Singh
la source
1

Le code de @Shadow Wizard doit renvoyer 02:45 PM au lieu de 14:45 PM. J'ai donc modifié un peu son code:

function getNowDateTimeStr(){
 var now = new Date();
 var hour = now.getHours() - (now.getHours() >= 12 ? 12 : 0);
return [[AddZero(now.getDate()), AddZero(now.getMonth() + 1), now.getFullYear()].join("/"), [AddZero(hour), AddZero(now.getMinutes())].join(":"), now.getHours() >= 12 ? "PM" : "AM"].join(" ");
}

//Pad given value to the left with "0"
function AddZero(num) {
    return (num >= 0 && num < 10) ? "0" + num : num + "";
}
dalmate
la source