¿Cómo obtener datetime en JavaScript?

Respuestas:

155

Semánticamente, probablemente estés buscando el one-liner

new Date().toLocaleString()

que formatea la fecha en la configuración regional del usuario.

Si realmente está buscando una forma específica de formatear fechas, le recomiendo la biblioteca moment.js .

Andrew Mao
fuente
3
Gracias por recomendar la biblioteca moment.js; es fantástico.
carbontwelve
3
Nadie debería escribir su propio código de fecha / hora (como en algunas de las otras respuestas). El número de casos de esquina es asombroso. Mire la página de prueba de la unidad para moment.js ( momentjs.com/tests ): ¡hay 66701 pruebas! Solo úsalo, es genial. O encuentre otra biblioteca, pero no escriba su propio código para esto, es muy probable que se pierda algo (lo he estropeado en el pasado).
sidewinderguy
1
No entiendo por qué fue tan difícil encontrar una respuesta de una línea como esta que funcione. Gracias.
timhc22
46

Si el formato es "fijo", lo que significa que no tiene que usar otro formato, puede tener JavaScript puro en lugar de usar toda la biblioteca para formatear la fecha:

//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 strDateTimemantendrá la fecha / hora en el formato que desee y debería poder ajustarla con bastante facilidad si lo necesita.

Estoy usando joincomo buena práctica, nada más, es mejor que sumar cadenas.

Shadow Wizard es Ear for You
fuente
@Jens sí, es lo más estándar posible, difícil de creer que cualquier navegador tenga una sintaxis diferente para los métodos básicos de fecha / hora. :)
Shadow Wizard es Ear For You el
2
gran solución, también para el formato de uso, simplemente intercambie las declaraciones AddZero (now.getDate ()) y AddZero (now.getMonth () + 1) y ajuste las horas, 12 si 0 y -12 si> 12. Buena suerte y gracias por la solución
Gent
su código debe devolver 02:45 PM en lugar de 14:45 PM. Así que modifiqué un poco su código: function getNowDateTimeStr () {var now = new Date (); var hora = 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 (""); } // ¿El valor dado del pad a la izquierda con la función "0" AddZero (num) {return (num> = 0 && num <10)? "0" + num: num + ""; }
dalmate
22
var now = new Date();

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

Obtenga todos los detalles aquí: Badassery flagrante »Formato de fecha de JavaScript

Arca
fuente
Ya probé este blog, y el tiempo se muestra como 20/50/2011 12:01 TT
nimi
2
Las m están equivocadas. Cambie la parte superior inferior, tiene minutos donde debería estar el mes y viceversa.
Triste
9

Date().toLocaleString() devuelve esto: 7/31/2018, 12:58:03 PM

Bastante cerca, solo suelta la coma y los segundos:

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

Resultados: 7/31/2018 12:58 PM

usuario1274820
fuente
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);
}

Código corregido a partir del 3 de septiembre de 12 a las 10:11

Opty
fuente
Revisa tu trabajo. Intenté esto y obtuve "06/03/112 05:02 PM" como salida. Lo único correcto allí es el tiempo. La fecha, el mes y (obviamente) el año son incorrectos.
Muhd
5

Puede convertir la Fecha a casi cualquier formato utilizando el Fragmento que he agregado a continuación.

Código:

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

Otros ejemplos

// 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"

fragmento :

Agregue el siguiente código tomado de este enlace en su código.

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
fuente
1

El código del @Shadow Wizard debería devolver las 02:45 PM en lugar de las 14:45 PM. Entonces modifiqué un poco su código:

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
fuente