[英]JavaScript Date toLocaleTimeString() not behaving as expected
[英]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.