2013-10-16 122 views
0

我有一個函數將日期轉換爲我的formatdate並將其與CurrentDate進行比較。 當我測試它與日期在Octorber日期相比今天(16/10/2013) 它運作良好但如果日期是在11月的日期,價值返回是真實的,這意味着日期< currentdate。我不知道爲什麼,任何人都可以向我解釋?非常感謝。通過Javascript比較DateTime,jquery

function IsPast(date) { 
     var fullDate = new Date(); 
     var twoDigitMonth = fullDate.getMonth() + 1 + ""; 
     if (twoDigitMonth.length == 1) twoDigitMonth = "0" + twoDigitMonth; 
     var twoDigitDate = fullDate.getDate() + ""; 
     if (twoDigitDate.length == 1) twoDigitDate = "0" + twoDigitDate; 
     var currentDate = twoDigitDate + "/" + twoDigitMonth + "/" + fullDate.getFullYear(); 
     var startDate = $.fullCalendar.formatDate(date, 'dd/MM/yyyy'); 

     if (startDate <= currentDate) {return true;} 
     return false; 
    } 
+0

我可以問你用什麼格式輸入日期,即IsPast(10/10/2010)? –

+0

這是Jquery的FullCalendar格式。我在格式化startDate和currentDate 2013年1月11日和2013年10月16日後檢查了該值,但它返回true:v –

+0

http://stackoverflow.com/questions/18697888/how-to-compare-date-in- javascript/18697997#18697997 –

回答

2

如果你正在傳遞一個Date對象(這似乎是你所得到的),那麼你可以簡單地做:

function isPast(date) { 
    return new Date() > date; 
} 

如果日期不是約會對象,將其轉換到第一。

請注意,以大寫字母開頭的標識符按照慣例是爲構造函數保留的。

+0

tks,這工作得很好:D –

2

編輯:我第一次看到你的問題,我看到你用一天第一次約會,並躍升到我的結論,而無需在代碼真的服用。我仔細看了一下,看來我的初步結論只是一條紅鯡魚。 The real問題是您正在採取兩個日期,將它們都轉換爲字符串,然後試圖比較它們。這只是愚蠢 - 它只會告訴你哪個字符串首先按字母順序排列。即使更粗糙,對於手動構建字符串的日期之一,對於另一個日期格式函數,也是如此。你爲什麼不在這兩個日期使用日期格式化功能?

RobG's answer是正確的,應該被接受。


當我看到日期「2013年1月11日」,我讀了它在2013年1月11日,而你讀它爲11月1日,2013年見困境的JavaScript引擎是它試圖在時解析日期?*

解析JavaScript日期時,我喜歡使用年份的第一次日期,因爲據我所知這些日期是明確的。大家將「2013/11/01」解釋爲2013年11月1日。包括我見過的每個JavaScript Date實現。

將您的日期格式更改爲明確。

* 坦率地說,我很驚訝你看到了這種行爲。我期望您的系統將被配置爲預計第一天的日期,並且JavaScript引擎將使用這些設置來正確分析日期。但是,我不是感到驚訝。