Dalam JavaScript, bagaimana saya bisa memformat objek tanggal untuk dicetak 10-Aug-2010
?
javascript
date
date-formatting
leora
sumber
sumber
myDate.getDay()
tidak mengembalikan hari dalam seminggu, tetapi lokasi hari kerja terkait dengan minggu itu.myDate.getDate()
mengembalikan hari kerja saat ini .Intl.DateTimeFormat
objek. Saya jelaskan di posting saya: Posting . Saya membuat solusi online untuk jawaban Anda denganIntl.DateTimeFormat
Periksa DaringtoLocaleDateString
Jawaban:
Untuk format tanggal terbatas kustom, Anda harus mengeluarkan komponen tanggal (atau waktu) dari
DateTimeFormat
objek (yang merupakan bagian dari API Internasionalisasi ECMAScript ), dan kemudian secara manual membuat string dengan pembatas yang Anda inginkan.Untuk melakukan ini, Anda dapat menggunakan
DateTimeFormat#formatToParts
:Anda juga bisa mengeluarkan bagian-bagian
DateTimeFormat
satu per satu menggunakanDateTimeFormat#format
, tetapi perhatikan bahwa ketika menggunakan metode ini, per Maret 2020, ada bug dalam implementasi ECMAScript ketika datang untuk memimpin nol pada menit dan detik (bug ini dielakkan dengan pendekatan di atas).Ketika bekerja dengan tanggal dan waktu, biasanya layak menggunakan perpustakaan (mis. Moment.js , luxon ) karena banyak kompleksitas tersembunyi dari lapangan.
Perhatikan bahwa API Internasionalisasi Script ECMAS, yang digunakan dalam solusi di atas tidak didukung di IE10 ( 0,03% pangsa pasar browser global pada Februari 2020).
sumber
Date
objek untuk melakukan ini?Jika Anda perlu sedikit kontrol atas pemformatan daripada jawaban yang saat ini diterima,
Date#toLocaleDateString
dapat digunakan untuk membuat rendering khusus lokal standar. Thelocale
danoptions
argumen membiarkan aplikasi menentukan bahasa yang format konvensi harus digunakan, dan memungkinkan beberapa kustomisasi rendering.Contoh kunci opsi:
Representasi hari itu.
Nilai yang mungkin adalah "numerik", "2 digit".
Representasi hari kerja.
Nilai yang mungkin adalah "sempit", "pendek", "panjang".
Representasi tahun.
Nilai yang mungkin adalah "numerik", "2 digit".
Representasi bulan.
Nilai yang mungkin adalah "numerik", "2 digit", "sempit", "pendek", "panjang".
Representasi jam.
Nilai yang mungkin adalah "numerik", "2 digit".
Nilai yang mungkin adalah "numerik", "2 digit".
Representasi yang kedua.
Nilai yang mungkin adalah "numerik", 2 digit ".
Semua kunci ini opsional. Anda dapat mengubah jumlah nilai opsi berdasarkan kebutuhan Anda, dan ini juga akan mencerminkan keberadaan setiap jangka waktu tanggal.
Catatan: Jika Anda hanya ingin mengonfigurasi opsi konten, tetapi masih menggunakan lokal saat ini, melewati
null
untuk parameter pertama akan menyebabkan kesalahan. Gunakanundefined
sebagai gantinya.Untuk berbagai bahasa:
Anda dapat menggunakan lebih banyak opsi bahasa.
Sebagai contoh
Anda juga dapat menggunakan
toLocaleString()
metode ini untuk tujuan yang sama. Satu-satunya perbedaan adalah fungsi ini menyediakan waktu ketika Anda tidak melewatkan opsi apa pun.Referensi:
toLocaleString()
toLocaleDateString()
sumber
moment.js
untuk format sederhana. Untungnya melakukan pencarian google tambahan dan menemukan sudah ada API asli yang melakukan ini. Menyimpan ketergantungan eksternal. Luar biasa!undefined
sebagai parameter lokal pertama terasa sewenang-wenang, Anda dapat meneruskan nilai"default"
untuk menggunakan pengaturan lokal browser, per MDN docs developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…date.toLocaleDateString("en-US", { day: 'numeric' }) + "-"+ date.toLocaleDateString("en-US", { month: 'short' }) + "-" + date.toLocaleDateString("en-US", { year: 'numeric' })
harus memberi16-Nov-2019
Gunakan perpustakaan date.format :
pengembalian:
format tanggal pada npm
http://jsfiddle.net/phZr7/1/
sumber
require is not defined
Jika Anda perlu cepat memformat tanggal menggunakan plain JavaScript, penggunaan
getDate
,getMonth + 1
,getFullYear
,getHours
dangetMinutes
:Atau, jika Anda perlu diisi dengan nol:
sumber
toLocaleDateString()
dapat memformat tanggal menggunakan lokal nama bulan / hari..toString().padStart(2, '0')
("000" + d.getFullYear()).slice(-4)
String.padStart()
hanya tersedia dari ECMAScript 2017.Yah, yang saya inginkan adalah mengubah tanggal hari ini menjadi string tanggal yang ramah MySQL seperti 2012-06-23, dan menggunakan string itu sebagai parameter di salah satu pertanyaan saya. Solusi sederhana yang saya temukan adalah ini:
Perlu diingat bahwa solusi di atas tidak tidak memperhitungkan zona waktu Anda offset.
Anda dapat mempertimbangkan menggunakan fungsi ini sebagai gantinya:
Ini akan memberi Anda tanggal yang benar jika Anda mengeksekusi kode ini sekitar awal / akhir hari.
sumber
new Date(date + " UTC")
untuk mengelabui zona waktu, dan Anda dapat menghilangkan garis setMinutes. Man, javascript kotorvar today = new Date().toISOString().slice(0,-14)
:)new Date().toISOString().split('T')[0]
new Date().toISOString().slice(0, 16).replace('T',' ')
untuk memasukkan waktuFungsi pemformatan khusus:
Untuk format tetap, fungsi sederhana membuat pekerjaan. Contoh berikut menghasilkan format internasional YYYY-MM-DD:
Format OP dapat dihasilkan seperti:
Catatan: Namun, biasanya bukan ide yang baik untuk memperluas pustaka standar JavaScript (misalnya dengan menambahkan fungsi ini ke prototipe Tanggal).
Fungsi yang lebih maju dapat menghasilkan output yang dapat dikonfigurasi berdasarkan parameter format.
Jika menulis fungsi pemformatan terlalu panjang, ada banyak pustaka yang dapat melakukannya. Beberapa jawaban lain sudah menyebutkannya. Tetapi meningkatnya ketergantungan juga menjadikannya bagian-lawan.
Fungsi pemformatan ECMAScript standar:
Karena versi ECMAScript yang lebih baru,
Date
kelas memiliki beberapa fungsi pemformatan khusus:Catatan: dimungkinkan untuk menghasilkan output khusus dari format tersebut>
Cuplikan contoh:
sumber
new Date().toLocaleDateString()
memberi Andamm/dd/yyyy
tidakdd/mm/yyyy
tolong perbaiki yang itu.Jika Anda sudah menggunakan jQuery UI di proyek Anda, Anda bisa melakukannya dengan cara ini:
Beberapa opsi format tanggal datepicker untuk bermain dengan tersedia di sini .
sumber
Saya pikir Anda bisa menggunakan metode Tanggal yang tidak standar
toLocaleFormat(formatString)
formatString: String format dalam format yang sama yang diharapkan oleh
strftime()
fungsi dalam C.Referensi:
sumber
JavaScript polos adalah pilihan terbaik untuk pencetus kecil.
Di sisi lain, jika Anda membutuhkan lebih banyak barang kencan, MomentJS adalah solusi yang bagus.
Sebagai contoh:
sumber
YYYY
kecuali Anda tahu perbedaan antaraYYYY
danyyyy
: stackoverflow.com/questions/15133549/…YYYY
(bukanyyyy
) adalah tahun standar danGGGG
(bukanYYYY
) adalah tahun berbasis minggu ISO.Di browser modern (*) , Anda bisa melakukan ini:
Output jika dieksekusi hari ini (24 Januari, 2016):
(*) Menurut MDN , "browser modern" berarti Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ & Safari nightly build .
sumber
Anda harus melihat di date.js . Ini menambahkan banyak pembantu yang nyaman untuk bekerja dengan tanggal, misalnya, dalam kasus Anda:
Persiapan: http://www.datejs.com/2007/11/27/getting-started-with-datejs/
sumber
Saya bisa mendapatkan format yang Anda minta dalam satu baris tanpa perpustakaan dan tanpa metode Tanggal, cukup regex:
Dalam pengujian saya, ini bekerja dengan andal di browser utama (Chrome, Safari, Firefox, dan IE.) Seperti yang ditunjukkan @RobG, output Date.prototype.toString () bergantung pada implementasi, jadi cukup uji output untuk memastikan ini berfungsi tepat di mesin JavaScript Anda. Anda bahkan dapat menambahkan beberapa kode untuk menguji output string dan pastikan itu cocok dengan apa yang Anda harapkan sebelum Anda melakukan penggantian regex.
sumber
console.log(new Date().toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3'));
@ Sébastien - alternatif semua dukungan browser
Dokumentasi: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
sumber
new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})
pengembalian"Wed, Sep 06, 2017"
OK , kami mendapatkan sesuatu yang disebut Intl yang sangat berguna untuk memformat tanggal di JavaScript hari ini:
Tanggal Anda seperti di bawah ini:
Dan Anda berubah menjadi Tanggal dengan menggunakan Date baru () seperti di bawah ini:
Dan sekarang Anda dapat memformatnya sesuka Anda menggunakan daftar lokal seperti di bawah ini:
Jika Anda benar-benar menginginkan format yang Anda sebutkan di atas, Anda dapat melakukannya:
Dan hasilnya adalah:
Untuk lebih lanjut, lihat API Intl dan dokumentasi Intl.DateTimeFormat .
sumber
Menggunakan template string ECMAScript Edition 6 (ES6 / ES2015):
Jika Anda perlu mengubah pembatas:
sumber
Solusi Terpaket : Luxon
Jika Anda ingin menggunakan satu solusi untuk semua, saya sangat merekomendasikan menggunakan Luxon (versi modern dari Moment.js ) yang juga memformat di banyak bahasa / bahasa dan banyak fitur lainnya.
Luxon di-host di situs web Moment.js dan dikembangkan oleh pengembang Moment.js karena Moment.js memiliki keterbatasan yang ingin ditangani oleh pengembang tetapi tidak bisa.
Untuk memasang:
npm install luxon
atauyarn add luxon
(tautan kunjungi untuk metode pemasangan lainnya)Contoh:
luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');
Hasil:
Solusi Manual
Dengan menggunakan format yang sama seperti Moment.js, Class DateTimeFormatter (Java) , dan Class SimpleDateFormat (Java) , saya menerapkan solusi komprehensif di
formatDate(date, patternStr)
mana kode mudah dibaca dan dimodifikasi. Anda dapat menampilkan tanggal, waktu, AM / PM, dll. Lihat kode untuk contoh lebih lanjut.Contoh:
formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')
(
formatDate
diterapkan dalam cuplikan kode di bawah)Hasil:
Coba kode dengan mengklik "Jalankan cuplikan kode."
Pola Tanggal dan Waktu
yy
= 2 digit tahun;yyyy
= setahun penuhM
= digit bulan;MM
= 2 digit bulan;MMM
= nama bulan pendek;MMMM
= nama bulan penuhEEEE
= nama hari kerja penuh;EEE
= nama hari kerja pendekd
= hari digit;dd
= 2 digit harih
= jam pagi / malam;hh
= 2 digit jam pagi / malam;H
= jam;HH
= 2 digit jamm
= menit;mm
= 2 digit menit;aaa
= Pagi / sores
= detik;ss
= 2 digit detikS
= milidetikTerima kasih @Gerry telah membesarkan Luxon.
sumber
SimpleDateFormat
kelas yang merepotkan digantikan bertahun-tahun yang lalu olehjava.time.format.DateTimeFormatter
kelas.Berikut adalah beberapa kode yang baru saja saya tulis untuk menangani format tanggal untuk proyek yang sedang saya kerjakan. Ini meniru fungsi format tanggal PHP yang sesuai dengan kebutuhan saya. Jangan ragu untuk menggunakannya, itu hanya memperpanjang objek Date () yang sudah ada. Ini mungkin bukan solusi yang paling elegan tetapi ini bekerja untuk kebutuhan saya.
sumber
Solusi JavaScript tanpa menggunakan perpustakaan eksternal apa pun:
sumber
Dokumentasi lebih lanjut di developer.mozilla.org
sumber
Jika Anda menggunakan jQuery UI dalam kode Anda, ada fungsi inbuilt yang disebut
formatDate()
. Saya menggunakannya dengan cara ini untuk memformat tanggal hari ini:Anda dapat melihat banyak contoh lain dari format tanggal dalam dokumentasi jQuery UI .
sumber
Kami memiliki banyak solusi untuk ini, tetapi saya pikir yang terbaik dari mereka adalah Moment.js. Jadi saya pribadi menyarankan untuk menggunakan Moment.js untuk operasi tanggal dan waktu.
sumber
Cara yang berguna dan fleksibel untuk memformat DateTimes dalam JavaScript adalah
Intl.DateTimeFormat
:Hasilnya adalah:
"12-Oct-2017"
Format tanggal dan waktu dapat dikustomisasi menggunakan argumen opsi.
Itu
Intl.DateTimeFormat
objek adalah konstruktor untuk objek yang memungkinkan bahasa tanggal sensitif dan format waktu.Sintaksis
Parameter
lokal
Pilihan. Sebuah string dengan tag bahasa BCP 47, atau array dari string tersebut. Untuk bentuk umum dan interpretasi argumen locales, lihat halaman Intl. Kunci ekstensi Unicode berikut diizinkan:
Pilihan
Pilihan. Objek dengan beberapa atau semua properti berikut:
localeMatcher
Algoritma pencocokan lokal untuk digunakan. Nilai yang mungkin adalah
"lookup"
dan"best fit"
; standarnya adalah"best fit"
. Untuk informasi tentang opsi ini, lihat halaman Intl.zona waktu
Zona waktu untuk digunakan. Satu-satunya implementasi nilai yang harus dikenali adalah
"UTC"
; default adalah zona waktu default runtime. Implementasi juga dapat mengenali nama-nama zona waktu dari waktu IANA database zona, seperti"Asia/Shanghai"
,"Asia/Kolkata"
,"America/New_York"
.jam12
Apakah akan menggunakan waktu 12 jam (dibandingkan dengan waktu 24 jam). Nilai yang mungkin adalah
true
danfalse
; standarnya adalah tergantung lokal.formatMatcher
Algoritma pencocokan format untuk digunakan. Nilai yang mungkin adalah
"basic"
dan"best fit"
; standarnya adalah"best fit"
. Lihat paragraf berikut untuk informasi tentang penggunaan properti ini.Properti berikut menjelaskan komponen tanggal-waktu untuk digunakan dalam output yang diformat dan representasi yang diinginkan. Implementasi diperlukan untuk mendukung setidaknya subset berikut:
Implementasi dapat mendukung himpunan bagian lainnya, dan permintaan akan dinegosiasikan dengan semua kombinasi subset-representasi yang tersedia untuk menemukan yang paling cocok. Dua algoritma tersedia untuk negosiasi ini dan dipilih oleh properti formatMatcher:
"basic"
Algoritme yang ditentukan sepenuhnya dan algoritma "cocok paling cocok" tergantung implementasi.hari kerja
Representasi hari kerja. Nilai yang mungkin adalah
"narrow"
,"short"
,"long"
.zaman
Representasi era. Nilai yang mungkin adalah
"narrow"
,"short"
,"long"
.tahun
Representasi tahun ini. Nilai yang mungkin adalah
"numeric"
,"2-digit"
.bulan
Representasi bulan. Nilai yang mungkin adalah
"numeric"
,"2-digit"
,"narrow"
,"short"
,"long"
.hari
Representasi hari itu. Nilai yang mungkin adalah
"numeric"
,"2-digit"
.jam
Representasi jam. Nilai yang mungkin adalah
"numeric"
,"2-digit"
.menit
Representasi menit. Nilai yang mungkin adalah
"numeric"
,"2-digit"
.kedua
Representasi yang kedua. Nilai yang mungkin adalah
"numeric"
,"2-digit"
.timeZoneName
Representasi nama zona waktu. Nilai yang mungkin adalah
"short"
,"long"
. Nilai default untuk setiap properti komponen tanggal-waktu tidak ditentukan, tetapi jika semua properti komponen tidak ditentukan, maka tahun, bulan, dan hari diasumsikan menjadi"numeric"
.Periksa Daring
Keterangan lebih lanjut
sumber
Ini dapat membantu masalah:
sumber
d.toLocaleDateString('en-US', options);
jika Anda berada di AS.Ini adalah bagaimana saya menerapkan plugin npm saya
sumber
March
akan menjadi3arch
dengan kode ini.'M'
menjadiformat = format.replace("M(?!M)", (dt.getMonth()+1).toString());
dan letakkan di atas baris dengan'MMMM'
sumber
Sugar.js memiliki ekstensi luar biasa untuk objek Date, termasuk format Date.form metode .
Contoh dari dokumentasi:
sumber
Untuk siapa pun yang mencari solusi ES6 yang sangat sederhana untuk menyalin, menempel, dan mengadopsi:
sumber
Pada 2019, sepertinya Anda bisa mendapatkan toLocaleDateString untuk mengembalikan hanya bagian-bagian tertentu dan kemudian Anda dapat bergabung dengan mereka sesuai keinginan:
sumber
Anda harus melihat DayJs Ini adalah remake dari momentJs tetapi arsitektur modular yang berorientasi lebih ringan.
Alternatif 2kB cepat untuk Moment.js dengan API modern yang sama
sumber
Untuk mendapatkan "10-Agu-2010", coba:
Untuk dukungan browser, lihat toLocaleDateString .
sumber