我正在尝试比较aspx表单上的两个文本框值。这两个值都代表日期。它们的格式类似于“dd / MMM / yyyy”。如何在JavaScript中比较它们以确定它们是否相等以及哪一个更大等等?
JavaScript是否有像这样的字符串的日期构造函数?任何提示将不胜感激。
答案 0 :(得分:3)
你想使用Date.parse() 所以要以毫秒为单位转换为Unix时间戳:
var d = Date.parse("Jul 8, 2005");
> 1120773600000
您现在可以将日期作为整数值进行操作。
答案 1 :(得分:0)
将日期转换为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
答案 2 :(得分:0)
了解Date object。
答案 3 :(得分:0)
可悲的是,Date.parse
方式不可靠,甚至不适用于ISO格式。
下面是一个快速的一次性功能,用于解析您当前使用的格式的日期。如果你喜欢你可以添加一些健全性检查,看看这一天是否在每个月的范围内(不要忘记leapyear然后:)),但如果一个人有合理的控制权,那么这就行了。
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
答案 4 :(得分:0)
如果您只想进行比较,那么您可以这样做:
compareDates(d1, d2) {
d1 = d1.split("/").reverse().join("/");
d2 = d2.split("/").reverse().join("/");
return d1 == d2 ? 0 : d1 < d2 ? : -1 : 1;
}
假设参数的格式为“dd / mm / yyyy”,如果d1 == d2,则该函数将返回0,如果d1
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;
}