Pertanyaan Bandingkan dua tanggal dengan JavaScript


Dapatkah seseorang menyarankan suatu cara untuk membandingkan nilai-nilai dua tanggal lebih besar daripada, kurang dari, dan tidak di masa lalu menggunakan JavaScript? Nilai akan berasal dari kotak teks ...


1374
2018-01-29 19:14


asal


Jawaban:


Itu Objek tanggal akan melakukan apa yang Anda inginkan - membuat satu untuk setiap tanggal, lalu membandingkannya menggunakan >, <, <= atau >=.

Itu ==, !=, ===, dan !== operator mengharuskan Anda untuk menggunakannya date.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 persamaan langsung dengan objek data tidak akan berfungsi

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 beberapa bentuk entri tanggal yang dibatasi serupa daripada kotak teks, meskipun, jangan sampai Anda menemukan diri Anda dalam neraka validasi input.


1563
2018-01-29 19:20



Cara termudah untuk membandingkan tanggal dalam javascript adalah dengan terlebih dahulu mengonversinya menjadi objek Tanggal dan kemudian membandingkan objek-tanggal ini.

Di bawah ini Anda menemukan objek dengan tiga fungsi:

  • date.compare (a, b)

    Mengembalikan angka:

    • -1 jika <b
    • 0 jika a = b
    • 1 jika a> b
    • NaN jika a atau b adalah tanggal ilegal
  • dates.inRange (d, mulai, akhir)

    Mengembalikan boolean atau NaN:

    • benar jika d adalah antara mulai dan akhir (inklusif)
    • Salah jika d sebelumnya mulai atau setelah akhir.
    • NaN jika satu atau lebih dari tanggal tersebut ilegal.
  • dates.convert

    Digunakan oleh fungsi lain untuk mengubah masukan mereka menjadi objek tanggal. Masukannya bisa

    • Sebuah tanggal-object: Masukan dikembalikan sebagaimana adanya.
    • sebuah larik: Diartikan sebagai [tahun, bulan, hari]. CATATAN bulan adalah 0-11.
    • Sebuah jumlah : Diartikan sebagai jumlah milidetik sejak 1 Jan 1970 (stempel waktu)
    • Sebuah tali : Beberapa format berbeda didukung, seperti "YYYY / MM / DD", "MM / DD / YYYY", "31 Januari 2009" dll.
    • sebuah obyek: Diartikan sebagai objek dengan atribut tahun, bulan, dan tanggal. CATATAN bulan adalah 0-11.

.

// 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<b) :
            NaN
        );
    },
    inRange:function(d,start,end) {
        // Checks if date in d is between dates in start and end.
        // Returns a boolean or NaN:
        //    true  : if d is between start and end (inclusive)
        //    false : if d is before start or after end
        //    NaN   : if one or more of the dates is illegal.
        // NOTE: The code inside isFinite does an assignment (=).
       return (
            isFinite(d=this.convert(d).valueOf()) &&
            isFinite(start=this.convert(start).valueOf()) &&
            isFinite(end=this.convert(end).valueOf()) ?
            start <= d && d <= end :
            NaN
        );
    }
}

374
2018-01-31 00:18



Membandingkan < dan > sama seperti biasa, tetapi apapun yang melibatkan = harus menggunakan + awalan. Seperti ini:

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 <= +y;  => true
+x >= +y;  => true
+x === +y; => true

Semoga ini membantu!


221
2018-05-23 12:21



Operator relasional <  <=  >  >= dapat digunakan untuk membandingkan tanggal JavaScript:

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

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

  • Dua objek yang berbeda tidak pernah sama untuk perbandingan ketat atau abstrak.
  • Ekspresi yang membandingkan Objek hanya benar jika operan merujuk pada 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 Date.getTime() dan Date.valueOf() kembalikan jumlah milidetik sejak 1 Januari 1970, 00:00 UTC. Kedua Number berfungsi dan unary + operator memanggil valueOf() metode di balik layar.


124
2018-01-31 16:04



Sejauh ini cara termudah adalah mengurangi satu tanggal dari yang lain dan membandingkan hasilnya.

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

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

63
2017-11-01 00:48



Bandingkan hari saja (mengabaikan komponen waktu):

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

Pemakaian:

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

30
2017-09-27 15:38



Perbandingan tanggal di JavaScript cukup mudah ... JavaScript punya built-in sistem perbandingan untuk tanggal yang membuatnya sangat mudah untuk melakukan perbandingan ...

Cukup ikuti langkah-langkah ini untuk membandingkan 2 nilai 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, mereka adalah sebagai berikut:

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

2 Mereka perlu Date Object untuk dibandingkan sebagai nilai tanggal, jadi cukup ubah menjadi tanggal, gunakan new Date(), Saya hanya menetapkan ulang mereka untuk kesederhanaan penjelasan, tetapi Anda tetap dapat melakukannya seperti yang Anda sukai:

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

3 Sekarang hanya membandingkannya, menggunakan >  <  >=  <=

date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true

compare dates in javascript


28
2017-07-11 09:59



format apa?

Jika Anda membangun Javascript Objek tanggal, Anda hanya dapat menguranginya untuk mendapatkan selisih milidetik (edit: atau bandingkan saja):

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

25
2018-01-29 19:19



function datesEqual(a, b)
{
   return (!(a>b || b>a))
}

13
2017-07-20 03:36