Làm cách nào để lấy datetime trong JavaScript?


Câu trả lời:


155

Về mặt ngữ nghĩa, có lẽ bạn đang tìm kiếm một lớp lót

new Date().toLocaleString()

trong đó định dạng ngày ở miền địa phương của người dùng.

Nếu bạn thực sự đang tìm kiếm một cách cụ thể để định dạng ngày, tôi khuyên bạn nên thư viện khoảnh khắc .


3
Cảm ơn bạn đã giới thiệu thư viện Moment.js; thật tuyệt vơi.
carbontw 12

3
Không ai nên viết mã ngày / giờ của riêng họ (như trong một số câu trả lời khác). Số lượng các trường hợp góc là đáng kinh ngạc. Hãy nhìn vào trang thử nghiệm đơn vị cho khoảnh khắc.js ( khoảnh khắcjs.com / tests ) - có 66701 bài kiểm tra! Chỉ cần sử dụng nó, nó là tuyệt vời. Hoặc tìm một thư viện khác, nhưng đừng viết mã của riêng bạn cho việc này, rất có thể bạn sẽ bỏ lỡ điều gì đó (tôi đã nhầm lẫn điều này trong quá khứ).
sidinderguy

1
Tôi không hiểu tại sao thật khó để tìm một câu trả lời một dòng như thế này. Cảm ơn.
timhc22

46

Nếu định dạng là "cố định" nghĩa là bạn không phải sử dụng định dạng khác, bạn có thể có JavaScript thuần thay vì sử dụng toàn bộ thư viện để định dạng ngày:

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

Biến strDateTimesẽ giữ ngày / giờ theo định dạng bạn mong muốn và bạn sẽ có thể điều chỉnh nó khá dễ dàng nếu bạn cần.

Tôi đang sử dụng joinnhư một thực hành tốt, không có gì hơn, tốt hơn là thêm các chuỗi lại với nhau.


@Jens yep về tiêu chuẩn nhất có thể, khó có thể tin rằng bất kỳ trình duyệt nào cũng sẽ có cú pháp khác nhau cho các phương thức ngày / giờ cơ bản. :)
Shadow Wizard là Ear For You

2
giải pháp tuyệt vời, cũng để sử dụng định dạng, chỉ cần hoán đổi các câu lệnh AddZero (now.getDate ()) và AddZero (now.getMonth () + 1) và điều chỉnh số giờ thành, 12 nếu 0 và -12 nếu> 12. Chúc may mắn và cảm ơn vì giải pháp
Gent

mã của bạn sẽ trả về 02:45 PM thay vì 14:45 PM. Vì vậy, tôi đã sửa đổi mã của bạn một chút: function getNowDateTimeStr () {var now = new Date (); var giờ = now.getHours () - (now.getHours ()> = 12? 12: 0); return [[AddZero (now.getDate ()), AddZero (now.getMonth () + 1), ngay bây giờ )]. tham gia (":"), now.getHours ()> = 12? "PM": "AM"]. Tham gia (""); } // Đặt giá trị đã cho ở bên trái với hàm "0" AddZero (num) {return (num> = 0 && num <10)? "0" + num: num + ""; }
dalmate


9

Date().toLocaleString() trả lại cái này 7/31/2018, 12:58:03 PM

Khá gần - chỉ cần thả dấu phẩy và giây:

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

Các kết quả: 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);
}

Mã được sửa vào ngày 3 tháng 9 năm 12 lúc 10:11


Kiểm tra công việc của bạn. Tôi đã thử điều này và nhận được "03/06/112 05:02 PM" làm đầu ra. Chỉ có điều đúng trong đó là thời gian. Ngày, tháng và (rõ ràng) năm đều không chính xác.
Muhd

5

Bạn có thể chuyển đổi Ngày thành hầu hết mọi định dạng bằng Snippet tôi đã thêm bên dưới.

Mã số:

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

Những ví dụ khác

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

Đoạn trích :

Thêm mã sau đây được lấy từ liên kết này vào mã của bạn.

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

Mã của @Shadow Wizard sẽ trả về 02:45 PM thay vì 14:45 PM. Vì vậy, tôi đã sửa đổi mã của mình một chút:

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 + "";
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.