Bagaimana cara mendapatkan datetime dalam JavaScript?

Jawaban:

155

Semantik, Anda mungkin mencari satu-liner

new Date().toLocaleString()

yang memformat tanggal di lokal pengguna.

Jika Anda benar-benar mencari cara spesifik untuk memformat tanggal, saya sarankan perpustakaan moment.js .

Andrew Mao
sumber
3
Terima kasih telah merekomendasikan perpustakaan moment.js; itu fantastis.
carbontwelve
3
Tidak seorang pun harus menulis kode tanggal / waktu mereka sendiri (seperti dalam beberapa jawaban lainnya). Jumlah kasus sudut sangat mencengangkan. Lihat halaman tes unit untuk moment.js ( momentjs.com/tests ) - ada 66701 tes! Gunakan saja, itu bagus. Atau cari pustaka lain, tetapi jangan menulis kode Anda sendiri untuk ini, Anda kemungkinan besar akan kehilangan sesuatu (saya telah mengacaukan ini secara meriah di masa lalu).
sidewinderguy
1
Saya tidak mengerti mengapa sulit sekali menemukan jawaban satu baris seperti ini yang berfungsi. Terima kasih.
timhc22
46

Jika formatnya "tetap" artinya Anda tidak harus menggunakan format lain, Anda bisa menggunakan JavaScript murni alih-alih menggunakan seluruh pustaka untuk memformat tanggal:

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

Variabel strDateTimeakan menyimpan tanggal / waktu dalam format yang Anda inginkan dan Anda harus dapat men-tweak dengan mudah jika Anda membutuhkannya.

Saya menggunakan joinsebagai praktik yang baik, tidak lebih, lebih baik daripada menambahkan string bersama.

Shadow Wizard adalah Telinga Untuk Anda
sumber
@Jen ya ini tentang standar mungkin, sulit untuk percaya browser apa pun akan memiliki sintaks yang berbeda untuk metode tanggal / waktu dasar. :)
Shadow Wizard adalah Ear For You
2
solusi hebat, juga untuk format penggunaan, hanya menukar pernyataan AddZero (now.getDate ()) dan AddZero (now.getMonth () + 1) dan sesuaikan waktunya, 12 jika 0, dan -12 jika> 12. Selamat mencoba dan terima kasih atas solusinya
Gent
kode Anda harus mengembalikan 14:45 bukan 14:45. Jadi saya memodifikasi sedikit kode Anda: 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 (jam), AddZero (now.getMinutes () )] .gabung (":"), now.getHours ()> = 12? "PM": "AM"]. Join (""); } // Pad diberi nilai di sebelah kiri dengan fungsi "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");

Dapatkan detail lengkap di sini: Flagrant Badassery »Format Tanggal JavaScript

Tabut
sumber
Saya sudah mencoba blog ini, dan waktu ditampilkan sebagai 20/50/2011 12:01 TT
nimi
2
M salah. Ganti bagian atas dan bawah, Anda memiliki menit di mana bulan seharusnya dan sebaliknya.
Quibblesome
9

Date().toLocaleString() mengembalikan ini: 7/31/2018, 12:58:03 PM

Cukup dekat - cukup letakkan koma dan detik:

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

Hasil: 7/31/2018 12:58 PM

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

Kode diperbaiki pada 3 September 12 jam 10:11

Opty
sumber
Periksa pekerjaanmu. Saya mencoba ini dan mendapat "03/06/112 05:02 PM" sebagai hasilnya. Satu-satunya hal yang benar di sana adalah waktu. Tanggal, bulan, dan (jelas) tahun semuanya salah.
Muhd
5

Anda dapat mengonversi Tanggal ke hampir semua format menggunakan Cuplikan yang telah saya tambahkan di bawah.

Kode:

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

Contoh lainnya

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

Cuplikan :

Tambahkan kode berikut yang diambil dari tautan ini ke dalam kode Anda.

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

Kode @Shadow Wizard harus mengembalikan 14:45, bukan 14:45. Jadi saya sedikit memodifikasi kodenya:

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
sumber