簡體   English   中英

Javascript日期比較不符合預期

[英]Javascript Date Comparison not behaving as expected

我正在將一個SQL日期-不是datetime-對象推送到我的Javascript代碼中,我需要查看它是否在今天之前。 這是我的代碼(相關部分):

todaysDate = new Date();
todaysDate.setHours(0,0,0,0);
var date = Date.parse(row[3]);
// date.setHours(0,0,0,0);
if (date < todaysDate) {
    alert("date is before today");
    dueDate = '<small class="text-danger">';
} else {
    alert("date is after today");
    dueDate = '<small class="text-muted">';
}

row [3]是SQL日期的來源。 因此,這對除今天以外的所有日期都適用。 沒有注釋行,它認為具有今天日期的任何內容都是過去的。 用注釋行,我的代碼中斷了。 關於如何解決這個問題有什么想法嗎? 不知道我在做什么錯。

謝謝!

如果您的日期字符串類似於“ 2016-04-10”,並且時區位於格林尼治標准時間以西,例如-04:00,那么在符合ECMAScript 2016的瀏覽器中,您將獲得“ 2016-04-09T19:00”的日期: 00-0400" 。

當您使用new Date()創建日期並將小時設置為零(假設您在4月10日所在的位置)時,將獲得“ 2016-04-10T00:00:00-0400”的日期。

因此,比較時它們具有不同的時間值。

您需要將從數據庫中獲得的字符串視為本地字符串,或者將您所在的UCT日期視為當前日期,因此:

 var dateString = '2016-04-10'; var parsedDate = new Date(dateString); var todayUTCDate = new Date(); todayUTCDate.setUTCHours(0,0,0,0); document.write(parsedDate + '<br>' + todayUTCDate); 

並非所有瀏覽器都根據ECMAScript 2015解析字符串,因此應始終手動對其進行解析。 使用一個庫,或編寫一個小函數,例如

// Parse date string in format 'yyyy-mm-dd' as local date
function parseISOLocal(s) {
  var b = s.split(/\D/);
  return new Date(b[0], b[1]-1, b[2]);
}

並替換:

var date = Date.parse(row[3]);

有:

var date = parseISOLocal(row[3]);

然后在比較中比較時間值:

if (+date < +todaysDate) {

要么

if (date.getTime() < todaysDate.getTime()) {

使用日期對象的getTime()

getTime()方法返回1970年1月1日午夜到指定日期之間的毫秒數。

您可以比較毫秒並進行操作

date.getTime() > todaysDate.getTime()

另外,請確保Date.parse返回有效日期。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM