我試圖比較兩個文本框的aspx表單上的值。這兩個值都代表日期。它們格式化爲「dd/MMM/yyyy」。我怎樣才能比較他們在JavaScript中,看看他們是不是平等和哪一個更大等?JavaScript幫助 - 比較(dd/MMM/yyyy)格式的兩個日期
JavaScript是否有像這樣的字符串的日期構造函數?任何提示將不勝感激。
我試圖比較兩個文本框的aspx表單上的值。這兩個值都代表日期。它們格式化爲「dd/MMM/yyyy」。我怎樣才能比較他們在JavaScript中,看看他們是不是平等和哪一個更大等?JavaScript幫助 - 比較(dd/MMM/yyyy)格式的兩個日期
JavaScript是否有像這樣的字符串的日期構造函數?任何提示將不勝感激。
將日期轉換爲UNIX時間戳,然後比較這些值。
if (date1.getTime() > date2.getTime()) alert("bla");
是有點更精確的的getTime函數返回自1970/01/01毫秒數:http://www.w3schools.com/jsref/jsref_getTime.asp
而且關於UNIX時間一點解釋:http://en.wikipedia.org/wiki/Unix_time
好主意,他怎麼能做到這一點?是的代碼幫助:) – 2010-05-11 17:09:16
我認爲這正是他遇到的問題。也就是說,將字符串表示轉換爲可以進一步處理的值。 – 2010-05-11 17:09:17
任何例子?我從來沒有聽說過UNIX時間戳。謝謝! – Hcabnettek 2010-05-11 17:09:26
閱讀Date object。
你想用Date.parse() 所以要轉換爲Unix時間戳(毫秒):
var d = Date.parse("Jul 8, 2005");
> 1120773600000
現在,您可以操縱日期的積分值。
是的,這樣比較好,日期對象已經可以比較,所以如果你有一個字符串,那麼你就去。 – rnaud 2010-05-11 17:18:22
'Date.parse()'真的很有用。它可以節省您自己完成所有輸入解析的麻煩。這種方式按照你希望的方式工作:'Date(Date.parse(「21/May/2010」))' – 2010-05-11 17:24:57
hmm,.parse似乎不喜歡那種格式的日期。當我嘗試時我會得到一個NAN。我錯過了什麼嗎? – Hcabnettek 2010-05-11 17:49:24
不幸的是,Date.parse
的方式是不可靠的,即使是ISO格式。
下面是一個快速的one-off-ish函數,用於解析當前使用的格式的日期。如果你喜歡,你可以添加一些理智檢查,看看這一天是否在每個月的範圍內(不要忘記當年的閏年:)),但是如果一個人能夠合理控制一個人發送的字符串,這就可以工作。
function parseThisYourVeryKnownFormatToDate(dateString /* '12/Jun/2010' */) {
function getMonthIdx(monthName) {
var months = {
'Jan':0, 'Feb':1, 'Mar':2, 'Apr':3, 'May':4, 'Jun':5
, 'Jul':6, 'Aug':7, 'Sep':8, 'Oct':9, 'Nov':10, 'Dec':11
};
return months[monthName];
}
var format = /^(\d+)\/(\w{3})\/(\d{4})$/;
var match = format.exec(dateString);
if (!match) {return undefined;}
var day = match[1], monthIdx = getMonthIdx(match[2]), year = match[3];
return new Date(year, monthIdx, day);
}
var testDates = ['10/Jan/2008', '15/Jun/1971', '31/Dec/1999', 'bogus/date/foo'];
for (var idx=0, len=testDates.length; idx<len; ++idx) {
console.log(parseThisYourVeryKnownFormatToDate(testDates[idx])); // real date objects, except for the last
}
var d0 = (parseThisYourVeryKnownFormatToDate('15/Apr/2009'));
var d1 = (parseThisYourVeryKnownFormatToDate('12/Apr/2009'));
console.log(d0+' is after '+d1+': '+(d0.getTime()>d1.getTime())); // says true
console.log(d1+' is after '+d0+': '+(d1.getTime()>d0.getTime())); // says false
console.log(d0+' is after '+d0+': '+(d0.getTime()>d0.getTime())); // says false
如果你想要做一個比較,那麼你可以這樣做:
compareDates(d1, d2) {
d1 = d1.split("/").reverse().join("/");
d2 = d2.split("/").reverse().join("/");
return d1 == d2 ? 0 : d1 < d2 ? : -1 : 1;
}
假設參數的格式爲「DD/MM/YYYY」,這個函數將返回0,如果d1 == d2,如果是d1,則爲-1 < d2,如果d1> d2,則爲1。
PS:如果你的陣列不知道如何reverse
,教他們如何:
Array.prototype.reverse = function() {
var a = [];
for(var i=this.length; i; i--) a.push(this[i-1]);
return a;
}
編輯:我並確定沒有注意到「MMM」格式。那麼我想我會使用月份名稱的散列。
function compareDates(date1,date2) {
var d1 = date1.split("/").reverse();
var d2 = date2.split("/").reverse();
var months = { 'Jan':'01', 'Feb':'02' }; // ...
d1[1] = months[d1[1]] || '00';
d2[1] = months[d2[1]] || '00';
date1 = d1.join("/");
date2 = d2.join("/");
return date1 == date2 ? 0 : date1 < date2 ? : -1 : 1;
}
這不是「歐元」格式。歐洲有許多不同的日期格式在使用。 – 2010-05-11 17:02:41
對不起,重點是「dd/MMM/yyyy」格式。我如何比較兩個日期。 – Hcabnettek 2010-05-11 17:07:06
一年只有12個月的時候,你怎麼能擁有MMM? – 2010-05-11 17:08:08