[英]How to find if date if before current date in javascript
日期以yyyy-mm-dd字符串的形式存儲在javascript中,其時間部分始終為0,例如
今天是
"2016-09-04T00:00:00"
如何查找日期是否在當前日期之前? 我試過了
alert(new Date("2016-09-04T00:00:00") < new Date());
但是如果今天是2016-09-04,則返回true與錯誤
new Date()
也返回時間,這將產生錯誤的結果。
如何只比較日期部分?
今天的日期應該轉換為僅用於比較字符串的前10個字符的字符串和子字符串,還是有更好的選擇?
我從引用的問題中讀取了答案,但尚未找到針對該問題的明確答案。 這些答案描述了日期相等性比較的通用解決方案。 此問題詢問如何查找日期部分是否在當前日期之前。
您缺少時區偏移量。 試試這個: https : //jsfiddle.net/WalterIT/ved5a3hp/
dateA = new Date("2016-09-05T00:00:00");
offset = dateA.getTimezoneOffset() * 1000 * 60;
dateA = dateA.getTime() + offset;
dateB = new Date().setHours(0,0,0,0);
我已將其更改為5號(在我的時區中已經是今天。請根據需要進行修改)
嘗試
var old = new Date("2017-09-04T00:00:00").getTime();
var curr = Date.now();
alert((old < curr));
並更改年份進行測試。
試試dates.compare(a,b)-date是一個對象。 返回一個數字。 -1、0或1。
由於瀏覽器之間的差異,不建議使用Date構造函數解析字符串。
在這種情況下,符合ES5及更高版本的瀏覽器會將“ 2016-09-04T00:00:00”解析為2016年9月4日午夜的“本地”日期和時間。某些瀏覽器(例如Safari)將錯誤地解析將其視為UTC。 請參閱上述建議。
但是,在所有瀏覽器中, new Date()
都會為當前時刻而不是一天開始的午夜創建日期。 因此,如果您在2016年9月4日運行此代碼,則除非您在當地時間正好00:00:00.000運行它,否則new Date()
的時間將在00:00:00.000之后。
如果要比較兩者,則在一天的開始將new Date()
的時間部分設置為午夜,例如
// Returns false on 5 September, 2016 local time console.log(new Date('2016-09-05T00:00:00') < new Date().setHours(0,0,0,0));
上面的方法適用於大多數瀏覽器,因為<
運算符將第一個Date 強制轉換為其內部時間值,而setHours的返回值是第二個Date的調整后的時間值。
在創建兩個日期時都應使用主機系統時區偏移量,因此對兩個日期都具有相同的影響,因此在這種情況下可以忽略。
強烈建議您不要依賴使用Date構造函數或Date.parse解析字符串(它們等效於解析)。 始終手動解析字符串。 為您需要處理的格式使用定制功能,或者使用庫並提供要解析的格式。 這是您可以確保正確解析的唯一方法。
在日期對象上使用Gettime函數而不是對其進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.