我试图比较两个文本框的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