Membandingkan dua tanggal dengan JavaScript

Seseorang dapat menyarankan cara untuk membandingkan nilai-nilai tanggal lebih besar dari, kurang dari, dan bukan di masa lalu menggunakan JavaScript? Nilai yang akan datang dari kotak teks.

Mengomentari pertanyaan (5)
Larutan

Tombol Upload objek akan melakukan apa yang anda ingin membangun satu untuk setiap tanggal, kemudian membandingkan mereka dengan menggunakan >, <, <= atau >=.

Yang==, !=, ===, dan !== operator akan meminta anda untuk menggunakan tanggal.getTime() seperti dalam

var d1 = new Date();
var d2 = new Date(d1);
var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

untuk menjadi jelas hanya memeriksa kesetaraan langsung dengan benda-benda tanggal won't bekerja

var d1 = new Date();
var d2 = new Date(d1);

console.log(d1 == d2);   // prints false (wrong!) 
console.log(d1 === d2);  // prints false (wrong!)
console.log(d1 != d2);   // prints true  (wrong!)
console.log(d1 !== d2);  // prints true  (wrong!)
console.log(d1.getTime() === d2.getTime()); // prints true (correct)

Saya sarankan anda menggunakan drop-down atau mirip terkendala bentuk tanggal entri daripada kotak teks, meskipun, atau anda akan menemukan diri anda dalam validasi input neraka.

Komentar (21)

Cara termudah untuk membandingkan tanggal di javascript adalah dengan terlebih dahulu mengubahnya menjadi objek Tanggal dan kemudian membandingkan tanggal-benda.

Di bawah ini anda dapat menemukan objek dengan tiga fungsi:

  • tanggal.membandingkan(a,b)

Mengembalikan nomor:

  • -1 jika a < b

  • 0 jika a = b

  • 1 jika a > b

  • NaN jika a atau b adalah ilegal upload

  • tanggal.inRange (d,awal,akhir)

Mengembalikan boolean atau NaN:

  • benar jika d antara mulai dan end (inklusif)

  • false jika d sebelum mulai atau setelah end.

  • NaN jika satu atau lebih dari tanggal yang ilegal.

  • tanggal.mengkonversi

Digunakan oleh fungsi-fungsi lainnya untuk mengkonversi masukan mereka ke objek tanggal. Input dapat

  • a tanggal-objek : masukan kembali seperti.
  • sebuah hotel: Diartikan sebagai [tahun,bulan,hari]. CATATAN 0-11 bulan.
  • a jumlah : Diartikan sebagai jumlah milidetik sejak 1 Jan 1970 (timestamp)
  • a string : berbagai format yang didukung, seperti "YYYY/MM/DD", "MM/DD/YYYY", "31 Jan 2009" dll.
  • sebuah obyek: Diartikan sebagai sebuah objek dengan tahun, bulan dan tanggal atribut. CATATAN 0-11 bulan.

.


// Source: http://stackoverflow.com/questions/497790
var dates = {
    convert:function(d) {
        // Converts the date in d to a date-object. The input can be:
        //   a date object: returned without modification
        //  an array      : Interpreted as [year,month,day]. NOTE: month is 0-11.
        //   a number     : Interpreted as number of milliseconds
        //                  since 1 Jan 1970 (a timestamp) 
        //   a string     : Any format supported by the javascript engine, like
        //                  "YYYY/MM/DD", "MM/DD/YYYY", "Jan 31 2009" etc.
        //  an object     : Interpreted as an object with year, month and date
        //                  attributes.  **NOTE** month is 0-11.
        return (
            d.constructor === Date ? d :
            d.constructor === Array ? new Date(d[0],d[1],d[2]) :
            d.constructor === Number ? new Date(d) :
            d.constructor === String ? new Date(d) :
            typeof d === "object" ? new Date(d.year,d.month,d.date) :
            NaN
        );
    },
    compare:function(a,b) {
        // Compare two dates (could be of any type supported by the convert
        // function above) and returns:
        //  -1 : if a < b
        //   0 : if a = b
        //   1 : if a > b
        // NaN : if a or b is an illegal date
        // NOTE: The code inside isFinite does an assignment (=).
        return (
            isFinite(a=this.convert(a).valueOf()) &&
            isFinite(b=this.convert(b).valueOf()) ?
            (a>b)-(a
Komentar (3)

Membandingkan < dan > hanya seperti biasa, tapi apa pun yang melibatkan = harus menggunakan + awalan. Seperti:

var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

// less than, greater than is fine:
x < y; => false
x > y; => false
x === y; => false, oops!

// anything involving '=' should use the '+' prefix
// it will then compare the dates' millisecond values
+x  true
+x >= +y;  => true
+x === +y; => true

Harap ini membantu!

Komentar (8)

Relational operator < <= > >= dapat digunakan untuk membandingkan JavaScript tanggal:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <  d2; // true
d1   d2; // false
d1 >= d2; // false

Namun, kesetaraan operator== != === !== tidak dapat digunakan untuk membandingkan (nilai) tanggal karena:

  • Dua objek yang berbeda adalah tidak sama, baik untuk yang ketat atau abstrak perbandingan.
  • ekspresi membandingkan benda-Benda ini hanya benar jika operand reference Objek yang sama.

Anda dapat membandingkan nilai tanggal untuk kesetaraan menggunakan salah satu metode ini:

var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true

Kedua Tanggal.getTime() dan Tanggal.valueOf() mengembalikan jumlah milidetik sejak 1 januari 1970, 00:00 UTC. Kedua Nomor fungsi dan unary + operator sebut valueOf() metode di belakang layar.

Komentar (3)

Sejauh ini, cara termudah adalah dengan mengurangi tanggal satu dari yang lain dan bandingkan hasilnya.

var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo < 0);
alert(oDateOne - oDateTwo > 0);
Komentar (0)

Membandingkan tanggal dalam JavaScript adalah cukup mudah... JavaScript built-in perbandingan sistem tanggal yang membuatnya begitu mudah untuk melakukan perbandingan...

Hanya ikuti langkah-langkah berikut untuk membandingkan 2 tanggal nilai, misalnya anda memiliki 2 input yang masing-masing memiliki sebuah nilai Tanggal di String dan anda untuk membandingkan mereka...

1. anda memiliki 2 nilai string yang anda dapatkan dari input dan anda'd seperti untuk membandingkan mereka, mereka adalah sebagai berikut:

var date1 = '01/12/2018';
var date2 = '12/12/2018';

2. Yang mereka butuhkan untuk menjadi Objek Tanggal dapat dibandingkan sebagai nilai-nilai tanggal, jadi hanya mengkonversi mereka untuk saat ini, menggunakan new Date(), saya hanya re-menetapkan mereka untuk mempermudah penjelasan, tetapi anda dapat melakukannya anda seperti:

date1 = new Date(date1);
date2 = new Date(date2);

3. Sekarang hanya membandingkan mereka, menggunakan > < >= <=


date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 
Komentar (4)

Bandingkan hari saja (mengabaikan komponen waktu):

Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}

Penggunaan:

if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}
Komentar (2)

format apa?

Jika anda membangun sebuah Javascript objek Tanggal, anda hanya dapat mengurangi mereka untuk mendapatkan milidetik perbedaan (edit: atau hanya membandingkan mereka) :

js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true
Komentar (6)

JAWABAN SINGKAT

Berikut adalah fungsi yang mengembalikan {boolean} jika dari dateTime > untuk dateTime [Demo dalam aksi][1]

var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '

function isFromBiggerThanTo(dtmfrom, dtmto){
   return new Date(dtmfrom).getTime() >=  new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to)); //true

Penjelasan

[jsFiddle ][2]

var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ; //1375077000000 
console.log(typeof timeStamp_date_one);//number 
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000 
console.log(typeof timeStamp_date_two);//number 

karena anda sekarang memiliki kedua datetime dalam jumlah jenis anda dapat membandingkan mereka dengan operasi Perbandingan

( >, < ,= ,!= ,== ,!== ,>= DAN <=)

Kemudian

jika anda sudah familiar dengan C# Kustom Tanggal dan Waktu Format String perpustakaan ini harus melakukan hal yang sama dan membantu anda format tanggal dan waktu dtmFRM apakah anda lewat di tanggal waktu string atau format unix

Penggunaan ****

var myDateTime = new dtmFRM();

alert(myDateTime.ToString(1375077000000, "MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM

alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday

alert(myDateTime.ToString('1/21/2014', "this month is MMMM and the day is dd"));
//this month is january and the day is 21

[DEMO][4]

semua yang harus anda lakukan adalah melewati salah satu format ditenangkan di perpustakaan `js file

Komentar (2)

anda menggunakan kode ini,

var firstValue = "2012-05-12".split('-');
var secondValue = "2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]);     

  if (firstDate > secondDate)
  {
   alert("First Date  is greater than Second Date");
  }
 else
  {
    alert("Second Date  is greater than First Date");
  }

Dan juga cek link ini http://www.w3schools.com/js/js_obj_date.asp

Komentar (2)

Note - Bandingkan Hanya Upload Bagian:

Ketika kita membandingkan dua tanggal di javascript. Dibutuhkan jam, menit, dan detik juga menjadi pertimbangan.. Jadi Jika kita hanya perlu membandingkan upload hanya, ini adalah pendekatan:

var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);

Sekarang: jika date1.valueOf()> date2.valueOf() akan bekerja seperti pesona.

Komentar (0)
var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates
Komentar (0)
function datesEqual(a, b)
{
   return (!(a>b || b>a))
}
Komentar (3)

Hanya untuk menambah lagi kemungkinan untuk banyak pilihan yang ada, anda bisa mencoba:

if (date1.valueOf()==date2.valueOf()) .....

...yang tampaknya bekerja untuk saya. Tentu saja anda harus memastikan bahwa kedua tanggal tersebut tidak terdefinisi...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0) .....

Dengan cara ini kita dapat memastikan bahwa yang positif dibandingkan jika keduanya tidak terdefinisi juga, atau...

if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1) .....

...jika anda lebih suka mereka tidak sama.

Komentar (0)

Melalui Moment.js

Jsfiddle: http://jsfiddle.net/guhokemk/1/

function compare(dateTimeA, dateTimeB) {
    var momentA = moment(dateTimeA,"DD/MM/YYYY");
    var momentB = moment(dateTimeB,"DD/MM/YYYY");
    if (momentA > momentB) return 1;
    else if (momentA < momentB) return -1;
    else return 0;
}

alert(compare("11/07/2015", "10/07/2015"));

Metode yang mengembalikan 1 jika dateTimeA lebih besar dari dateTimeB

Method ini mengembalikan 0 jika dateTimeA sama dengan dateTimeB

Metode ini menghasilkan -1 jika dateTimeA kurang dari dateTimeB

Komentar (3)

HATI-HATI TIMEZONE

Javascript saat ini telah tanpa gagasan timezone. It's a moment in time (kutu sejak zaman) dengan fungsi berguna untuk menerjemahkan ke dan dari string di "lokal" timezone. Jika anda ingin bekerja dengan menggunakan tanggal upload benda-benda, seperti semua orang di sini adalah melakukan, anda ingin anda untuk mewakili UTC tengah malam di mulai dari tanggal tersebut. Ini adalah umum dan perlu konvensi yang memungkinkan anda bekerja dengan tanggal terlepas dari musim atau zona waktu dari penciptaan mereka. Jadi anda harus sangat waspada untuk mengelola gagasan zona waktu, terutama ketika anda membuat tengah malam UTC Tanggal obyek.

Sebagian besar waktu, anda akan ingin kencan anda untuk mencerminkan zona waktu dari pengguna. Klik jika hari ini adalah ulang tahun anda. Pengguna di NZ dan KITA klik pada waktu yang sama dan mendapatkan tanggal yang berbeda. Dalam hal ini, melakukan hal ini...

// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));

Kadang-kadang, internasional komparatif mengalahkan lokal akurasi. Dalam hal ini, melakukan hal ini...

// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));

Sekarang anda dapat langsung membandingkan benda-benda tanggal sebagai jawaban lain sarankan.

Setelah diambil dari perawatan untuk mengelola zona waktu ketika anda membuat, anda juga harus yakin untuk menjaga zona waktu ketika anda mengkonversi kembali ke representasi string. Jadi anda dapat dengan aman menggunakan...

  • toISOString()
  • getUTCxxx()
  • getTime() //mengembalikan nomor dengan tidak ada waktu atau timezone.
  • .toLocaleDateString("fr",{zona waktu:"UTC"}) // apapun lokal anda inginkan, tetapi SELALU UTC.

Dan benar-benar menghindari segala sesuatu yang lain, terutama...

  • getYear(),getMonth(),getDate()
Komentar (0)

Kurangi dua tanggal mendapatkan perbedaan dalam milidetik, jika anda mendapatkan 0 it's tanggal yang sama

function areSameDate(d1, d2){
    return d1 - d2 === 0
}
Komentar (0)

Untuk membandingkan dua tanggal yang bisa kita gunakan date.js library JavaScript yang dapat ditemukan di : https://code.google.com/archive/p/datejs/downloads

dan gunakan Tanggal.membandingkan( Tanggal date1, Tanggal date2 ) metode dan kembali jumlah yang berarti hasil sebagai berikut:

-1 = date1 adalah kurang date2.

0 = nilai yang sama.

1 = date1 lebih besar dari date2.

Komentar (0)

Dalam rangka untuk membuat tanggal dari teks bebas dalam Javascript yang anda butuhkan untuk mengurai menjadi Date() pada objek.

Anda bisa menggunakan Date.parse() yang mengambil teks bebas mencoba untuk mengubahnya menjadi sebuah tanggal baru tetapi jika anda memiliki kontrol atas halaman saya akan merekomendasikan menggunakan HTML pilih kotak atau bukan a date picker seperti YUI calendar control atau UI jQuery Datepicker.

Setelah anda memiliki kencan seperti orang lain telah menunjukkan anda dapat menggunakan aritmatika sederhana untuk mengurangi tanggal dan mengubahnya kembali menjadi jumlah hari dengan membagi jumlah (dalam detik) dengan jumlah detik dalam satu hari (606024 = 86400).

Komentar (0)

Cara sederhana ini,

var first = '2012-11-21';
var second = '2012-11-03';

if (new Date(first) > new Date(second) {
    .....
}
Komentar (0)