Mise en forme de l'heure actuelle avec Javascript

101

Je veux obtenir l'heure actuelle dans un format spécifique avec javascript.

Avec la fonction ci-dessous et en l'appelant, cela me donnera le vendredi 01 février 2013 13:56:40 GMT + 1300 (heure avancée de Nouvelle-Zélande) mais je veux le formater comme vendredi 14h00 1er février 2013

var d = new Date();
var x = document.getElementById("time");
x.innerHTML = d;

Bien sûr, le code ci-dessus n'a pas de logique de formatage mais je n'ai pas encore rencontré de formateurs "fonctionnels".

Seong Lee
la source
Pour une question similaire pour Node.js, voir stackoverflow.com/questions/10645994/…
Ohad Schneider

Réponses:

161

Une Date JavaScript dispose de plusieurs méthodes vous permettant d'extraire ses parties:

getFullYear()- Renvoie l'année à 4 chiffres
getMonth()- Renvoie un entier de base zéro (0-11) représentant le mois de l'année.
getDate()- Renvoie le jour du mois (1-31).
getDay()- Renvoie le jour de la semaine (0-6). 0 est dimanche, 6 est samedi.
getHours()- Renvoie l'heure du jour (0-23).
getMinutes()- Renvoie les minutes (0-59).
getSeconds()- Renvoie le second (0-59).
getMilliseconds()- Renvoie les millisecondes (0-999).
getTimezoneOffset()- Renvoie le nombre de minutes entre l'heure locale de la machine et UTC.

Il n'y a pas de méthode intégrée vous permettant d'obtenir des chaînes localisées telles que "vendredi", "février" ou "PM". Vous devez le coder vous-même. Pour obtenir la chaîne souhaitée, vous devez au moins stocker des représentations sous forme de chaîne de jours et de mois:

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

Ensuite, assemblez-le en utilisant les méthodes ci-dessus:

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var d = new Date();
var day = days[d.getDay()];
var hr = d.getHours();
var min = d.getMinutes();
if (min < 10) {
    min = "0" + min;
}
var ampm = "am";
if( hr > 12 ) {
    hr -= 12;
    ampm = "pm";
}
var date = d.getDate();
var month = months[d.getMonth()];
var year = d.getFullYear();
var x = document.getElementById("time");
x.innerHTML = day + " " + hr + ":" + min + ampm + " " + date + " " + month + " " + year;
<span id="time"></span>

J'ai une fonction de format de date que j'aime inclure dans ma bibliothèque standard. Il prend un paramètre de chaîne de format qui définit la sortie souhaitée. Les chaînes de format sont librement basées sur les chaînes de format de date et d'heure personnalisées .Net . Pour le format que vous avez spécifié la chaîne de format suivant fonctionnerait: "dddd h:mmtt d MMM yyyy".

var d = new Date();
var x = document.getElementById("time");
x.innerHTML = formatDate(d, "dddd h:mmtt d MMM yyyy");

Démo: jsfiddle.net/BNkkB/1

Voici ma fonction de formatage de date complète:

function formatDate(date, format, utc) {
    var MMMM = ["\x00", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var MMM = ["\x01", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    var dddd = ["\x02", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    var ddd = ["\x03", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

    function ii(i, len) {
        var s = i + "";
        len = len || 2;
        while (s.length < len) s = "0" + s;
        return s;
    }

    var y = utc ? date.getUTCFullYear() : date.getFullYear();
    format = format.replace(/(^|[^\\])yyyy+/g, "$1" + y);
    format = format.replace(/(^|[^\\])yy/g, "$1" + y.toString().substr(2, 2));
    format = format.replace(/(^|[^\\])y/g, "$1" + y);

    var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;
    format = format.replace(/(^|[^\\])MMMM+/g, "$1" + MMMM[0]);
    format = format.replace(/(^|[^\\])MMM/g, "$1" + MMM[0]);
    format = format.replace(/(^|[^\\])MM/g, "$1" + ii(M));
    format = format.replace(/(^|[^\\])M/g, "$1" + M);

    var d = utc ? date.getUTCDate() : date.getDate();
    format = format.replace(/(^|[^\\])dddd+/g, "$1" + dddd[0]);
    format = format.replace(/(^|[^\\])ddd/g, "$1" + ddd[0]);
    format = format.replace(/(^|[^\\])dd/g, "$1" + ii(d));
    format = format.replace(/(^|[^\\])d/g, "$1" + d);

    var H = utc ? date.getUTCHours() : date.getHours();
    format = format.replace(/(^|[^\\])HH+/g, "$1" + ii(H));
    format = format.replace(/(^|[^\\])H/g, "$1" + H);

    var h = H > 12 ? H - 12 : H == 0 ? 12 : H;
    format = format.replace(/(^|[^\\])hh+/g, "$1" + ii(h));
    format = format.replace(/(^|[^\\])h/g, "$1" + h);

    var m = utc ? date.getUTCMinutes() : date.getMinutes();
    format = format.replace(/(^|[^\\])mm+/g, "$1" + ii(m));
    format = format.replace(/(^|[^\\])m/g, "$1" + m);

    var s = utc ? date.getUTCSeconds() : date.getSeconds();
    format = format.replace(/(^|[^\\])ss+/g, "$1" + ii(s));
    format = format.replace(/(^|[^\\])s/g, "$1" + s);

    var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();
    format = format.replace(/(^|[^\\])fff+/g, "$1" + ii(f, 3));
    f = Math.round(f / 10);
    format = format.replace(/(^|[^\\])ff/g, "$1" + ii(f));
    f = Math.round(f / 10);
    format = format.replace(/(^|[^\\])f/g, "$1" + f);

    var T = H < 12 ? "AM" : "PM";
    format = format.replace(/(^|[^\\])TT+/g, "$1" + T);
    format = format.replace(/(^|[^\\])T/g, "$1" + T.charAt(0));

    var t = T.toLowerCase();
    format = format.replace(/(^|[^\\])tt+/g, "$1" + t);
    format = format.replace(/(^|[^\\])t/g, "$1" + t.charAt(0));

    var tz = -date.getTimezoneOffset();
    var K = utc || !tz ? "Z" : tz > 0 ? "+" : "-";
    if (!utc) {
        tz = Math.abs(tz);
        var tzHrs = Math.floor(tz / 60);
        var tzMin = tz % 60;
        K += ii(tzHrs) + ":" + ii(tzMin);
    }
    format = format.replace(/(^|[^\\])K/g, "$1" + K);

    var day = (utc ? date.getUTCDay() : date.getDay()) + 1;
    format = format.replace(new RegExp(dddd[0], "g"), dddd[day]);
    format = format.replace(new RegExp(ddd[0], "g"), ddd[day]);

    format = format.replace(new RegExp(MMMM[0], "g"), MMMM[M]);
    format = format.replace(new RegExp(MMM[0], "g"), MMM[M]);

    format = format.replace(/\\(.)/g, "$1");

    return format;
};
gilly3
la source
Merci beaucoup. Bien que mon code final ait besoin d'un peu d'ajustement, vos idées m'ont aidé.
Seong Lee
Comment formater la date = "2016/03/01 11:00" to date = "Sat Mar 01 2016 11:00:00 GMT + 0530 (IST)"
Vishal Singh
Comment MMMM[0]renvoie le nom du mois correct au lieu du caractère non imprimable à l'index 0? Ne devrait-il pas l'être MMMM[M]? Suis-je juste stupide? (Nevermind. Il le définit sur le caractère non imprimable, qu'il remplace plus tard afin d'éviter les conflits)
Danegraphics
190

Vous voudrez peut-être essayer

var d = new Date();
d.toLocaleString();       // -> "2/1/2013 7:37:08 AM"
d.toLocaleDateString();   // -> "2/1/2013"
d.toLocaleTimeString();  // -> "7:38:05 AM"

Documentation

Ye Lin Aung
la source
1
pourquoi votre méthode ne fonctionne pas pour moi? d.toLocaleTimeString()et d.toLocaleTimeString()ne fonctionnent pas.
afzalex
@afzalex vous voulez dire que vous n'obtenez aucun retour?
Ye Lin Aung
Oui. Je n'ai trouvé aucune méthode toLocaleTimeString()ettoLocaleTimeString()
afzalex
afzalex essayez celui-ci: new Date (). toLocaleString ();
blueberry0xff
console.log (nouvelle date (). toLocaleString ()); // 27/09/2015 14:52:18
blueberry0xff
37

Mise à jour 2017 : utilisez toLocaleDateString et toLocaleTimeString pour formater les dates et heures. Le premier paramètre passé à ces méthodes est une valeur locale, telle que en-us . Le deuxième paramètre, s'il est présent, spécifie les options de mise en forme, telles que la forme longue pour le jour de la semaine.

let date = new Date();  
let options = {  
    weekday: "long", year: "numeric", month: "short",  
    day: "numeric", hour: "2-digit", minute: "2-digit"  
};  

console.log(date.toLocaleTimeString("en-us", options)); 

Sortie: mercredi 25 octobre 2017, 20:19

Veuillez vous référer au lien ci-dessous pour plus de détails.

Chaînes de date et d'heure (JavaScript)

Joomler
la source
2
À l'heure actuelle - plus de quatre ans après les premières réponses à cette question - c'est désormais la solution la plus pratique et la plus flexible, et la réponse à cette question. Il devrait être promu plus haut comme exemple de pratique actuelle (AD 2018) :-)
Jochem Schulenklopper
Déchiré. Le port de strftime de @ thdoan semble plus flexible. Par exemple, toLocalTimeStringpropose 4 styles de date full long medium short, et peut-être que la signification de ces termes est définie quelque part. Pendant ce temps, strftime pourrait (probablement) correspondre à l'un d'entre eux et bien d'autres. D'autre part, toLocalTimeStringprend en charge les fuseaux horaires. J'espère que cela inclut les fuseaux horaires qui utilisent l'heure d'été ...
Captain Puget
14

Vous pouvez utiliser mon port de strftime :

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if ((nYear&3)!==0) return false;
      return nYear%100!==0 || nYear%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

Exemple d'utilisation:

// Returns "Thursday 4:45pm 15 Sep 2016"
strftime('%A %l:%M%P %e %b %Y');

// You can optionally pass it a Date object
// Returns "Friday 2:00pm 1 Feb 2013"
strftime('%A %l:%M%P %e %b %Y', new Date('Feb 1, 2013 2:00 PM'));

Le dernier code est disponible ici: https://github.com/thdoan/strftime

thdoan
la source
C'est génial. Merci beaucoup.
PerpetualStudent
7

Regardez les éléments internes de la classe Date et vous verrez que vous pouvez extraire tous les bits (date, mois, année, heure, etc.).

http://www.w3schools.com/jsref/jsref_obj_date.asp

Pour quelque chose comme Fri 23:00 1 Feb 2013le code, c'est comme:

date = new Date();

weekdayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var dateString = weekdayNames[date.getDay()] + " " 
    + date.getHours() + ":" + ("00" + date.getMinutes()).slice(-2) + " " 
    + date.getDate() + " " + monthNames[date.getMonth()] + " " + date.getFullYear();

console.log(dateString);

**** Modifié 2019-05-29 pour satisfaire 3 downvoters

Lee Meador
la source
9
w3schools n'est pas génial. Voir w3fools . Les meilleures sources de référence incluent MDN et MSDN .
gilly3
Date # getDay renvoie un entier, pas un nom de jour de la semaine. De plus, à mon humble avis, MDN fait pire pour faire passer rapidement le message concernant l'objet Date, donc je ne comprends pas pourquoi le dénigrement doit avoir lieu.
Ninjaxor
Le problème avec date.getMinutes()est qu'il renvoie un seul chiffre lorsque les minutes sont inférieures à 10, ce qui donne des heures telles que "10: 4 am" au lieu du plus courant "10:04 am".
Jochem Schulenklopper
@JochemSchulenklopper Ajout du code sans date pour afficher un zéro non significatif sur les minutes
Lee Meador
@Ninjaxor Ajout d'un code non lié à la date pour convertir un nombre en chaîne. Cela devrait fonctionner si vous voulez des noms anglais.
Lee Meador
4

Il existe de nombreuses grandes bibliothèques pour ceux qui sont intéressés

Il ne devrait vraiment pas être nécessaire de nos jours d'inventer vos propres spécificateurs de formatage.

slf
la source
Je voulais juste mentionner, en octobre 2017, momentla norme actuelle pour les éléments liés au temps en Javascript.
shawon191
merci @ shawon191 pour la mise à jour :) ya, momentroches. d3a également ajouté du temps, donc si vous l'utilisez déjà, vous pourrez peut-être enregistrer une importation de bibliothèque github.com/d3/d3/blob/master/API.md#time-formats-d3-time-format
slf
1

2,39 Ko minifiés. Un fichier. https://github.com/rhroyston/clock-js

L'heure actuelle est

var str = clock.month;
var m = str.charAt(0).toUpperCase() + str.slice(1,3); //gets you abbreviated month
clock.weekday + ' ' + clock.time + ' ' + clock.day + ' ' + m + ' ' + clock.year; //"tuesday 5:50 PM 3 May 2016"
Ronnie Royston
la source
1

d = Date.now();
d = new Date(d);
d = (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear()+' '+(d.getHours() > 12 ? d.getHours() - 12 : d.getHours())+':'+d.getMinutes()+' '+(d.getHours() >= 12 ? "PM" : "AM");

console.log(d);

Cris
la source
0

Pour travailler avec la classe Date de base, vous pouvez consulter MDN pour ses méthodes (au lieu de W3Schools pour cette raison ). Vous y trouverez une bonne description de chaque méthode utile pour accéder à chaque composant date / heure et des informations relatives au fait qu'une méthode est obsolète ou non.

Sinon, vous pouvez consulter Moment.js qui est une bonne bibliothèque à utiliser pour le traitement de la date et de l'heure. Vous pouvez l'utiliser pour manipuler la date et l'heure (comme l'analyse, le formatage, i18n, etc.).

Ragnarokkr
la source
0
function formatTime(date){

  d = new Date(date);
  var h=d.getHours(),m=d.getMinutes(),l="AM";
  if(h > 12){
    h = h - 12;
  }
  if(h < 10){
    h = '0'+h;
  }
  if(m < 10){
    m = '0'+m;
  }
  if(d.getHours() >= 12){
    l="PM"
  }else{
    l="AM"
  }

  return h+':'+m+' '+l;

}

Utilisation et résultat:

var formattedTime=formatTime(new Date('2020 15:00'));
// Output: "03:00 PM"
Simon
la source
0

Pour ce vrai style mysql, utilisez cette fonction ci-dessous: 2019/02/28 15:33:12

  • Si vous cliquez sur le
  • Bouton "Exécuter l'extrait de code" ci-dessous
  • Il vous montrera un exemple d'horloge numérique en temps réel simple. La démo apparaîtra sous l'extrait de code.

function getDateTime() {
        var now     = new Date(); 
        var year    = now.getFullYear();
        var month   = now.getMonth()+1; 
        var day     = now.getDate();
        var hour    = now.getHours();
        var minute  = now.getMinutes();
        var second  = now.getSeconds(); 
        if(month.toString().length == 1) {
             month = '0'+month;
        }
        if(day.toString().length == 1) {
             day = '0'+day;
        }   
        if(hour.toString().length == 1) {
             hour = '0'+hour;
        }
        if(minute.toString().length == 1) {
             minute = '0'+minute;
        }
        if(second.toString().length == 1) {
             second = '0'+second;
        }   
        var dateTime = year+'/'+month+'/'+day+' '+hour+':'+minute+':'+second;   
         return dateTime;
    }

    // example usage: realtime clock
    setInterval(function(){
        currentTime = getDateTime();
        document.getElementById("digital-clock").innerHTML = currentTime;
    }, 1000);
<div id="digital-clock"></div>

Daniel Lee
la source
0

ISO8601 (par exemple: HH: MM: SS, 07:55:55 ou 18:50:30) sur chrome:

new Date (Date.now ()). toTimeString (). substr (0,8);

sur le bord:

nouvelle Date (Date.now ()). toLocaleTimeString ();

Wael Chorfan
la source
-2
function startTime() {
    var today = new Date(),
        h = checkTime(((today.getHours() + 11) % 12 + 1)),
        m = checkTime(today.getMinutes()),
        s = checkTime(today.getSeconds());
    document.getElementById('demo').innerHTML = h + ":" + m + ":" + s;
    t = setTimeout(function () {
        startTime()
    }, 500);
}
startTime();

}) ();

05:12:00

Umashankar Chaudhary
la source
Votre réponse ne répond en aucun cas au PO.
Sнаđошƒаӽ
Qu'est-ce que la fonction checkTime?
Weijing Jay Lin
-4

let date = new Date();
let time = date.format("hh:ss")

Владимир Олейников
la source
3
L'exécution du code donne une erreur: Uncaught TypeError: date.format n'est pas une fonction
Alex Leo