Dapatkah seseorang menyarankan cara untuk membandingkan nilai dua tanggal yang lebih besar dari, kurang dari, dan tidak di masa lalu menggunakan JavaScript? Nilai akan berasal dari kotak teks.
javascript
date
datetime
compare
Alex
sumber
sumber
Jawaban:
The Tanggal objek akan melakukan apa yang Anda inginkan - membangun satu untuk setiap tanggal, kemudian membandingkannya menggunakan
>
,<
,<=
atau>=
.The
==
,!=
,===
, dan!==
operator meminta Anda untuk menggunakandate.getTime()
seperti diuntuk menjadi jelas hanya memeriksa persamaan langsung dengan objek tanggal tidak akan berfungsi
Saya sarankan Anda menggunakan drop-down atau bentuk entri tanggal yang dibatasi serupa daripada kotak teks, meskipun, jangan sampai Anda menemukan diri Anda dalam neraka validasi input.
sumber
setHours(0,0,0,0)
dengan cara ini. Menghilangkan kebutuhan untuk meneleponsetMinutes()
dll. Juga, mengeksekusi lebih cepat.toString()
metode ini saja pada kedua tanggal dan kemudian membandingkannya dengan==
operator? Tampaknya jauh lebih mudah daripada mengatur ulang waktu dan membandingkan setelah itu, apakah ada kelemahan untuk ini?Cara termudah untuk membandingkan tanggal dalam javascript adalah dengan terlebih dahulu mengubahnya menjadi objek Date dan kemudian membandingkan objek-tanggal ini.
Di bawah ini Anda menemukan objek dengan tiga fungsi:
Date.compare (a, b)
Mengembalikan nomor:
Date.inRange (d, mulai, akhir)
Mengembalikan boolean atau NaN:
tanggal. konversi
Digunakan oleh fungsi lain untuk mengonversi input mereka ke objek tanggal. Inputnya bisa
.
sumber
(a > b) - (a < b)
berguna untuk mengurutkan array tanggalArray.prototype.sort
selama semua nilai adalah tanggal yang valid. Jika mungkin ada tanggal yang tidak valid, saya sarankan menggunakan sesuatu sepertifunction ( a, b ) { a = a === undefined || a === null : NaN : a.valueOf( a ); b = a === undefined || b === null : NaN : a.valueOf( b ); return isFinite( a ) && isFinite( b ) ? ( a > b ) - ( a < b ) : NaN; }
return a - b
lebih sederhana dan menggantikan seluruh pernyataan pengembalian.Bandingkan
<
dan>
seperti biasa, tetapi apa pun yang melibatkan=
harus menggunakan+
awalan. Seperti itu:Semoga ini membantu!
sumber
x.getTime() === y.getTime()
metode, baik dibaca dan sangat cepat lihat jsperf+
Operator berusaha untuk mengubah ekspresi menjadi Nomor.Date.valueOf()
digunakan untuk konversi (yang mengembalikan hal yang sama denganDate.getTime()
.<
,<=
,>
Dan>=
menggunakan algoritma yang sama ( abstrak algoritma perbandingan relasional ) di belakang layar.Operator relasional
<
<=
>
>=
dapat digunakan untuk membandingkan tanggal JavaScript:Namun, operator persamaan
==
!=
===
!==
tidak dapat digunakan untuk membandingkan (nilai) tanggal karena :Anda dapat membandingkan nilai tanggal untuk persamaan menggunakan salah satu dari metode ini:
Keduanya
Date.getTime()
danDate.valueOf()
mengembalikan jumlah milidetik sejak 1 Januari 1970, 00:00 UTC. OperatorNumber
fungsi dan unary+
memanggilvalueOf()
metode di belakang layar.sumber
Thursday, 10 Aug 2017
adalah format non-standar dan browser yang berbeda mungkin menguraikannya secara berbeda, atau tidak menguraikannya sama sekali. Lihat catatan diDate.parse
.Sejauh ini metode termudah adalah dengan mengurangi satu tanggal dari yang lain dan membandingkan hasilnya.
sumber
Membandingkan tanggal di JavaScript cukup mudah ... JavaScript telah built-in sistem perbandingan untuk tanggal yang membuatnya begitu mudah untuk melakukan perbandingan ...
Cukup ikuti langkah-langkah ini untuk membandingkan nilai 2 tanggal, misalnya Anda memiliki 2 input yang masing-masing memiliki nilai Tanggal
String
dan Anda membandingkannya ...1. Anda memiliki 2 nilai string yang Anda dapatkan dari input dan Anda ingin membandingkannya, seperti di bawah ini:
2. Mereka perlu
Date Object
dibandingkan sebagai nilai tanggal, jadi cukup konversikan menjadi tanggal, dengan menggunakannew Date()
, saya hanya menetapkan ulang untuk kesederhanaan penjelasan, tetapi Anda tetap dapat melakukannya jika Anda suka:3. Sekarang cukup membandingkannya, menggunakan
>
<
>=
<=
sumber
<
,>
,<=
,>=
) yang digunakan, benda-benda Tanggal dikonversi pertama yang unix zaman (detik), dan bekerja dengan baik. Namun ini mungkin mengarah pada kesalahan umum melakukan didate1 == date2
mana memang kesalahan diperkenalkan bukan nilai tetapi contoh kesetaraan diperiksa. Untuk mencegah hal ini dan memeriksa kesetaraan dari nilai tanggal ini akan berhasildate1.valueOf() == date2.valueOf()
date1+0 == date2+0
Note: Parsing of strings with Date.parse is strongly discouraged due to browser differences and inconsistencies.
danNote: Parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
Bandingkan hanya hari (mengabaikan komponen waktu):
Pemakaian:
sumber
format apa?
Jika Anda membuat objek Tanggal Javascript , Anda bisa mengurangi mereka untuk mendapatkan perbedaan milidetik (edit: atau bandingkan saja):
sumber
==
masalah perbandingan yang disebutkan di atas.Anda menggunakan kode ini,
Dan juga periksa tautan ini http://www.w3schools.com/js/js_obj_date.asp
sumber
JAWABAN SINGKAT
Berikut adalah fungsi yang mengembalikan {boolean} jika dari dateTime> ke dateTime Demo beraksi
Penjelasan
jsFiddle
karena Anda sekarang memiliki kedua datetime dalam tipe angka, Anda dapat membandingkannya dengan operasi Perbandingan apa pun
(>, <, =,! =, ==,! ==,> = DAN <=)
Kemudian
jika Anda terbiasa dengan
C#
String Format Tanggal dan Waktu Kustom, perpustakaan ini harus melakukan hal yang sama persis dan membantu Anda memformat tanggal dan waktu Anda dtmFRM apakah Anda memasukkan string waktu tanggal atau format unixPemakaian
DEMO
yang harus Anda lakukan adalah melewati salah satu dari format ini yang
js
disimpan dalam file librarysumber
Cara sederhana adalah,
sumber
Catatan - Bandingkan Hanya Tanggal Bagian:
Ketika kita membandingkan dua tanggal dalam javascript. Dibutuhkan jam, menit dan detik juga menjadi pertimbangan .. Jadi Jika kita hanya perlu membandingkan tanggal saja, inilah pendekatannya:
Sekarang:
if date1.valueOf()> date2.valueOf()
akan bekerja seperti pesona.sumber
sumber
a
danb
menjadiDate
objek Anda juga dapat menggunakanreturn a*1 == b*1;
+a == +b
sumber
Untuk menambahkan kemungkinan lain ke banyak opsi yang ada, Anda dapat mencoba:
... yang sepertinya bekerja untukku. Tentu saja Anda harus memastikan bahwa kedua tanggal tidak ditentukan ...
Dengan cara ini kami dapat memastikan bahwa perbandingan positif dibuat jika keduanya juga tidak ditentukan, atau ...
... jika Anda lebih suka mereka tidak sama.
sumber
Via Moment.js
Jsfiddle: http://jsfiddle.net/guhokemk/1/
Metode mengembalikan 1 jika
dateTimeA
lebih besar daridateTimeB
Metode mengembalikan 0 jika
dateTimeA
sama dengandateTimeB
Metode mengembalikan -1 jika
dateTimeA
kurang daridateTimeB
sumber
Date
objek.<
atau>
operator ketika saat sudah datang dengan metode perbandingan berguna seperti.isBefore
dan.isAfter
, itu semua ada dalam dokumenHATI-HATI WAKTU
Tanggal javascript tidak memiliki gagasan tentang zona waktu . Ini adalah momen dalam waktu (kutu sejak zamannya) dengan fungsi praktis untuk menerjemahkan ke dan dari string di zona waktu "lokal". Jika Anda ingin bekerja dengan tanggal menggunakan objek tanggal, seperti yang dilakukan semua orang di sini, Anda ingin tanggal Anda mewakili UTC tengah malam pada awal tanggal tersebut. Ini adalah konvensi umum dan perlu yang memungkinkan Anda bekerja dengan tanggal terlepas dari musim atau zona waktu pembuatannya. Jadi Anda harus sangat waspada untuk mengelola gagasan tentang zona waktu, terutama ketika Anda membuat objek Tanggal UTC tengah malam Anda.
Sebagian besar waktu, Anda ingin tanggal Anda mencerminkan zona waktu pengguna. Klik jika hari ini adalah hari ulang tahun Anda . Pengguna di NZ dan AS mengklik pada waktu yang sama dan mendapatkan tanggal yang berbeda. Dalam hal ini, lakukan ini ...
Terkadang, perbandingan internasional mengalahkan akurasi lokal. Dalam hal ini, lakukan ini ...
Sekarang Anda dapat langsung membandingkan objek kencan Anda seperti yang disarankan oleh jawaban lain.
Setelah berhati-hati mengelola zona waktu saat Anda membuat, Anda juga harus memastikan untuk tidak menggunakan zona waktu saat Anda mengonversi kembali ke representasi string. Jadi Anda bisa menggunakan ...
toISOString()
getUTCxxx()
getTime() //returns a number with no time or timezone.
.toLocaleDateString("fr",{timezone:"UTC"}) // whatever locale you want, but ALWAYS UTC.
Dan benar-benar menghindari yang lainnya, terutama ...
getYear()
,getMonth()
,getDate()
sumber
Katakanlah Anda mendapatkan objek tanggal A dan B, dapatkan nilai waktu EPOC mereka, lalu kurangi untuk mendapatkan perbedaan dalam milidetik.
Itu saja.
sumber
Untuk membandingkan dua tanggal, kita dapat menggunakan perpustakaan JavaScript date.js yang dapat ditemukan di: https://code.google.com/archive/p/datejs/downloads
dan gunakan
Date.compare( Date date1, Date date2 )
metode dan mengembalikan angka yang berarti hasil berikut:-1 = date1 kurang dari date2.
0 = nilainya sama.
1 = date1 lebih bagus dari date2.
sumber
Kurangi dua tanggal, dapatkan selisih dalam milidetik, jika Anda mendapatkannya
0
pada tanggal yang samasumber
Untuk membuat tanggal dari teks gratis dalam Javascript, Anda perlu menguraikannya ke dalam objek Date ().
Anda bisa menggunakan Date.parse () yang membutuhkan percobaan teks gratis untuk mengubahnya menjadi tanggal baru tetapi jika Anda memiliki kontrol atas halaman saya akan merekomendasikan menggunakan kotak pilih HTML sebagai gantinya atau pemilih tanggal seperti kontrol kalender YUI atau jQuery UI Datepicker .
Setelah Anda berkencan seperti yang ditunjukkan orang lain, Anda dapat menggunakan aritmatika sederhana untuk mengurangi tanggal dan mengubahnya kembali menjadi beberapa hari dengan membagi angka (dalam detik) dengan jumlah detik dalam sehari (60 * 60 * 24 = 86400).
sumber
sumber
Versi perbaikan kode yang diposting oleh "some"
pemakaian:
sumber
Jika berikut adalah format tanggal Anda, Anda dapat menggunakan kode ini:
Ini akan memeriksa apakah
20121121
angkanya lebih besar20121103
atau tidak.sumber
first == second
ataufirst < second
ataufirst > second
. Itu salah satu dari banyak keindahan dengan ISO8601 dibandingkan dengan MM / DD / YY, DD / MM / YY, YY / DD / MM, DD / YY / MM atau MM / YY / DD.Saya biasanya menyimpan
Dates
sepertitimestamps(Number)
di database.Ketika saya perlu membandingkan, saya cukup membandingkan antara cap waktu atau
mengubahnya menjadi Objek Tanggal dan kemudian bandingkan dengan
> <
jika perlu.Perhatikan bahwa == atau === tidak berfungsi dengan baik kecuali variabel Anda adalah referensi dari Objek Tanggal yang sama.
Konversikan objek Date tersebut menjadi stempel waktu (angka) terlebih dahulu dan kemudian bandingkan persamaannya.
Tanggal ke Timestamp
Stempel waktu ke Tanggal
sumber
Sebelum membandingkan
Dates
objek, coba atur kedua milidetiknya ke nol sepertiDate.setMilliseconds(0);
.Dalam beberapa kasus di mana
Date
objek dibuat secara dinamis dalam javascript, jika Anda terus mencetakDate.getTime()
, Anda akan melihat milidetik berubah, yang akan mencegah persamaan kedua tanggal.sumber
Performa
Hari ini 2020.02.27 Saya melakukan tes solusi yang dipilih pada Chrome v80.0, Safari v13.0.5 dan Firefox 73.0.1 pada MacOs High Sierra v10.13.6
Kesimpulan
d1==d2
(D) dand1===d2
(E) adalah yang tercepat untuk semua browsergetTime
(A) lebih cepat darivalueOf
(B) (keduanya sedang cepat)Detail
Di bawah ini cuplikan solusi yang digunakan dalam tes kinerja disajikan. Anda dapat melakukan tes di mesin Anda DI SINI
Tampilkan cuplikan kode
Hasil untuk chrome
sumber
d1==d2
ataud1===d2
tidak berguna dalam konteks pertanyaan.Gunakan kode ini untuk membandingkan tanggal menggunakan javascript.
Terima kasih D. Jova
sumber
sumber
Inilah yang saya lakukan di salah satu proyek saya,
memanggil ini di form onsubmit. semoga ini membantu.
sumber