Formateo de la hora actual con Javascript


101

Quiero obtener la hora actual en un formato específico con javascript.

Con la función a continuación y llamarla me dará el viernes 01 de febrero de 2013 13:56:40 GMT + 1300 (hora de verano de Nueva Zelanda) pero quiero formatearlo como viernes 2:00 pm 1 de febrero de 2013

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

Por supuesto, el código anterior no tiene ninguna lógica de formato, pero todavía no me he encontrado con ningún formateador "funcional".


Para una pregunta similar para Node.js, consulte stackoverflow.com/questions/10645994/…
Ohad Schneider

Respuestas:


160

Una fecha de JavaScript tiene varios métodos que le permiten extraer sus partes:

getFullYear()- Devuelve el año de 4 dígitos
getMonth()- Devuelve un entero de base cero (0-11) que representa el mes del año.
getDate()- Devuelve el día del mes (1-31).
getDay()- Devuelve el día de la semana (0-6). 0 es domingo, 6 es sábado.
getHours()- Devuelve la hora del día (0-23).
getMinutes()- Devuelve el minuto (0-59).
getSeconds()- Devuelve el segundo (0-59).
getMilliseconds()- Devuelve los milisegundos (0-999).
getTimezoneOffset()- Devuelve el número de minutos entre la hora local de la máquina y UTC.

No hay métodos integrados que le permitan obtener cadenas localizadas como "Viernes", "Febrero" o "PM". Tienes que codificarlo tú mismo. Para obtener la cadena que desea, al menos necesita almacenar representaciones de cadena de días y meses:

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

Luego, júntelo usando los métodos anteriores:

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>

Tengo una función de formato de fecha que me gusta incluir en mi biblioteca estándar. Toma un parámetro de cadena de formato que define la salida deseada. Las cadenas de formato se basan libremente en cadenas de formato de fecha y hora personalizadas de .Net . Para el formato que ha especificado la siguiente cadena de formato funcionaría: "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");

Demostración: jsfiddle.net/BNkkB/1

Aquí está mi función de formato de fecha completa:

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

Muchas gracias. Aunque mi código final necesitaba algunos ajustes, sus conocimientos ayudaron.
Seong Lee

¿Cómo puedo formatear la fecha = "2016/03/01 11:00" hasta la fecha = "Sáb 01 de marzo de 2016 11:00:00 GMT + 0530 (IST)"
Vishal Singh

¿Cómo MMMM[0]devuelve el nombre del mes correcto en lugar del carácter no imprimible en el índice 0? ¿No debería serlo MMMM[M]? ¿Soy tonto? (No importa. Lo establece en el carácter no imprimible, que reemplaza más tarde para evitar conflictos)
Danegraphics

189

Puede que quieras probar

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

Documentación


1
¿Por qué tu método no me funciona? d.toLocaleTimeString()y d.toLocaleTimeString()no funcionan.
afzalex

@afzalex, ¿quieres decir que no obtendrás ninguna devolución?
Ye Lin Aung

si. No encontré ningún método toLocaleTimeString()ytoLocaleTimeString()
afzalex

afzalex prueba este: new Date (). toLocaleString ();
blueberry0xff

console.log (nueva fecha (). toLocaleString ()); // 27/9/2015, 2:52:18 PM
blueberry0xff

37

Actualización de 2017 : use toLocaleDateString y toLocaleTimeString para formatear fechas y horas. El primer parámetro que se pasa a estos métodos es un valor de configuración regional, como en-us . El segundo parámetro, cuando está presente, especifica las opciones de formato, como la forma larga para el día de la semana.

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

Salida: miércoles, 25 de octubre de 2017, 8:19 p.m.

Consulte el enlace a continuación para obtener más detalles.

Cadenas de fecha y hora (JavaScript)


2
En este momento, más de cuatro años después de las primeras respuestas a esta pregunta, esta es la solución más conveniente y flexible, y la respuesta a esta pregunta. Debería promoverse más alto como un ejemplo de la práctica actual (AD 2018) :-)
Jochem Schulenklopper

Rasgado. El puerto de strftime de @ thdoan parece más flexible. Por ejemplo, toLocalTimeStringofrece 4 estilos de fecha full long medium short, y quizás el significado de esos términos esté definido en alguna parte. Mientras tanto, strftime podría (probablemente) coincidir con cualquiera de esos y muchos más. Por otro lado, toLocalTimeStringadmite zonas horarias. Espero que eso incluya las zonas horarias que utilizan el horario de verano ...
Capitán Puget

14

Puedes usar mi puerto 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;
  });
}

Uso de muestra:

// 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'));

El último código está disponible aquí: https://github.com/thdoan/strftime


Esto es asombroso. Muchas gracias.
PerpetualStudent

7

Mire los aspectos internos de la clase Date y verá que puede extraer todos los bits (fecha, mes, año, hora, etc.).

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

Para algo como Fri 23:00 1 Feb 2013el código es como:

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

**** Modificado 2019-05-29 para mantener felices a 3 votantes en contra


9
w3schools no es genial. Consulte w3fools . Las mejores fuentes de referencia incluyen MDN y MSDN .
gilly3

Date # getDay devuelve un número entero, no un nombre de día de la semana. Además, en mi humilde opinión, MDN lo hace peor para transmitir el punto rápidamente con respecto al objeto Date, por lo que no entiendo por qué debe tener lugar el menosprecio.
Ninjaxor

El problema date.getMinutes()es que devuelve un solo dígito cuando los minutos son inferiores a 10, lo que da como resultado tiempos como "10: 4 am" en lugar del más común "10:04 am".
Jochem Schulenklopper

@JochemSchulenklopper Se agregó el código sin fecha para mostrar un cero a la izquierda en los minutos
Lee Meador

@Ninjaxor Se agregó un código no relacionado con la fecha para convertir un número en una cadena. Esto debería funcionar si quieres nombres en inglés.
Lee Meador

4

Hay muchas bibliotecas geniales para aquellos interesados

Realmente no debería ser necesario en estos días inventar sus propios especificadores de formato.


Solo quería mencionar, a partir de octubre de 2017, que momentes el estándar actual para cosas relacionadas con el tiempo en Javascript.
shawon191

gracias @ shawon191 por la actualización :) ya, momentrocas. d3también ha agregado algunas cosas de tiempo, por lo que si ya lo está usando, es posible que pueda guardar una importación de biblioteca github.com/d3/d3/blob/master/API.md#time-formats-d3-time-format
slf

1

2,39 KB minificado. Un archivo. https://github.com/rhroyston/clock-js

La hora actual es

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"

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


0

Para trabajar con la clase Date base, puede buscar en MDN sus métodos (en lugar de W3Schools debido a esta razón ). Allí puede encontrar una buena descripción sobre cada método útil para acceder a cada componente de fecha / hora e información relativa a si un método está obsoleto o no.

De lo contrario, puede mirar Moment.js, que es una buena biblioteca para usar para el procesamiento de fecha y hora. Puede usarlo para manipular la fecha y la hora (como analizar, formatear, i18n, etc.).


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;

}

Uso y resultado:

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

0

Para este verdadero estilo mysql use esta función a continuación: 2019/02/28 15:33:12

  • Si hace clic en el
  • Botón "Ejecutar fragmento de código" a continuación
  • Le mostrará un ejemplo simple de reloj digital en tiempo real. La demostración aparecerá debajo del fragmento de código.

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>


0

ISO8601 (por ejemplo: HH: MM: SS, 07:55:55 o 18:50:30) en Chrome:

nueva fecha (Date.now ()). toTimeString (). substr (0,8);

en el borde:

nueva Fecha (Date.now ()). toLocaleTimeString ();


-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


Su respuesta de ninguna manera responde al OP.
Sнаđошƒаӽ

¿Qué es la función checkTime?
Weijing Jay Lin

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.