Как получить дату и время в JavaScript?


Ответы:


155

Семантически, вы, вероятно, ищете однострочник

new Date().toLocaleString()

который форматирует дату в локали пользователя.

Если вы действительно ищете конкретный способ форматирования дат, я рекомендую библиотеку moment.js .


3
Спасибо за рекомендацию библиотеки moment.js; это фантастика.
carbontwelve

3
Никто не должен писать свой собственный код даты / времени (как в некоторых других ответах). Количество угловых случаев поразительно. Посмотрите на страницу модульного тестирования для moment.js ( momentjs.com/tests ) - там 66701 тестов! Просто используйте это, это здорово. Или найдите другую библиотеку, но не пишите свой собственный код для этого, вы, скорее всего, что-то упустите (в прошлом я облажался по-королевски).
sidewinderguy

1
Я не понимаю, почему так сложно было найти такой однострочный ответ, который работает. Спасибо.
timhc22

46

Если формат «фиксированный», то есть вам не нужно использовать другой формат, вы можете использовать чистый JavaScript вместо использования всей библиотеки для форматирования даты:

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

Переменная strDateTimeбудет содержать дату / время в желаемом формате, и вы сможете легко настроить ее, если вам нужно.

Я использую в joinкачестве хорошей практики, ничего более, это лучше, чем сложение строк вместе.


@Jens Да, он настолько стандартен, насколько это возможно, трудно поверить, что любой браузер будет иметь другой синтаксис для основных методов даты / времени. :)
Shadow Wizard - это ухо для тебя

2
отличное решение, также для использования формата, просто поменяйте местами операторы AddZero (now.getDate ()) и AddZero (now.getMonth () + 1) и отрегулируйте количество часов, равное 12, если 0, и -12, если> 12. Удачи и спасибо за решение
Гент

Ваш код должен возвращаться в 14:45 вместо 14:45. Поэтому я немного изменил ваш код: 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 (час), AddZero (now.getMinutes () )]. join (":"), now.getHours ()> = 12? "PM": "AM"]. Join (""); } // Добавляем заданное значение влево с помощью функции «0» AddZero (num) {return (num> = 0 && num <10)? "0" + num: num + ""; }
далматин

22
var now = new Date();

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

Получить полную информацию здесь: Flagrant Badassery »JavaScript Date Format


Я уже пробовал этот блог, и время отображается как 20/50/2011 12:01 TT
Nimi

2
М не правы. Переключите верхнее нижнее, у вас будет минута, где должен быть месяц, и наоборот.
Ужасно

9

Date().toLocaleString() возвращает это: 7/31/2018, 12:58:03 PM

Довольно близко - просто бросьте запятую и секунды:

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

Полученные результаты: 7/31/2018 12:58 PM


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

Код исправлен по состоянию на 3 сентября 12 года в 10:11.


Проверь свою работу. Я попробовал это и получил "03/06/112 5:02 PM" в качестве выхода. Единственная правильная вещь - это время. Дата, месяц и (очевидно) год неверны.
Чт

5

Вы можете конвертировать дату практически в любой формат, используя фрагмент, который я добавил ниже.

Код:

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

Другие примеры

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

Фрагмент :

Добавьте следующий код, полученный по этой ссылке, в ваш код.

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

1

Код @Shadow Wizard должен возвращаться в 14:45 вместо 14:45. Поэтому я немного изменил его код:

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 + "";
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.