我想比较两个日期。我有这个代码,我认为这将是一种享受,但事实并非如此。现在我只想在结束日期小于开始日期时发出错误警告。对于此之前的其他事件,日期样式yyyy-mm-dd
需要以此格式保留。这段代码有什么问题?
startdate = "2009-11-01" ;
enddate = "2009-11-04" ;
var d1 = new Date(startdate)
var d2 = new Date(enddate)
if (d2 < d1) {
alert ("Error ! ) ;
}
document.cookie='st =' + startdate // set sytem cookie
document.cookie='en =' + enddate
window.location = self.location.href
window.opener.location.reload()
close()
答案 0 :(得分:11)
尝试使用DateJS,这是一个可以处理几乎所有内容的开源JavaScript日期库!以下示例正在运行:
<script type="text/javascript" src="date.js"></script>
<script>
startdate = "2009-11-01";
enddate = "2009-11-04";
var d1 = Date.parse(startdate);
var d2 = Date.parse(enddate) ;
if (d1 < d2) {
alert ("Error!");
}
</script>
答案 1 :(得分:3)
Date构造函数无法解析该格式,并且由于您无法更改它,因此您应手动解析它,并将year
,month
和date
部分传递给它,例如:
function compareDates(startDate, endDate) {
// parse a date in yyyy-mm-dd format
function parseDate(input) {
var parts = input.match(/(\d+)/g);
return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
if (parseDate(endDate) < parseDate(startDate)) {
alert ("Error !");
}
}
用法:
var startDate = "2009-11-01",
endDate = "2009-11-04";
compareDates(startDate, endDate);
答案 2 :(得分:3)
var myDate=new Date();
myDate.setFullYear(2010,0,14);
var today = new Date();
if (myDate>today)
{
alert("Today is before 14th January 2010");
}
else
{
alert("Today is after 14th January 2010");
}
答案 3 :(得分:3)
你正在使用一个很好的国际标准,JavaScript可以理解。但事实并非如此。
问题是您的日期采用ISO 8601标准格式,内置Date.parse()
无法读取。
JavaScript实现了RFC 822 / 1123中较旧的IETF日期。一种解决方案是将它们调整为RFC样式,您可以看到in RFC1123,它看起来像 dd month yyyy 。
有关于可以全面扫描ISO格式的编码浮动,现在你知道google的“iso标准日期”,你可以得到它。 Over here我发现了这个:
Date.prototype.setISO8601 = function (string) {
var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
"(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
"(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
var d = string.match(new RegExp(regexp));
var offset = 0;
var date = new Date(d[1], 0, 1);
if (d[3]) { date.setMonth(d[3] - 1); }
if (d[5]) { date.setDate(d[5]); }
if (d[7]) { date.setHours(d[7]); }
if (d[8]) { date.setMinutes(d[8]); }
if (d[10]) { date.setSeconds(d[10]); }
if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
if (d[14]) {
offset = (Number(d[16]) * 60) + Number(d[17]);
offset *= ((d[15] == '-') ? 1 : -1);
}
offset -= date.getTimezoneOffset();
time = (Number(date) + (offset * 60 * 1000));
this.setTime(Number(time));
}
js> t = new Date()
Sun Nov 01 2009 09:48:41 GMT-0800 (PST)
js> t.setISO8601("2009-11-01")
js> t
Sat Oct 31 2009 17:00:00 GMT-0700 (PDT)
11-01会在我的时区重新解释,只要您的所有日期获得相同的转换,然后他们应该合理地进行比较,否则您可以将TZ信息添加到您的字符串或Date对象。
答案 4 :(得分:1)
如果您只需要知道一个日期是否在另一个之前,您可以使用Date对象的getTime()方法来比较自1970年1月1日午夜以来它们各自的毫秒数:
if( d2.getTime() < d1.getTime() )
{
alert("eeeek!");
}
---不要混淆并尝试使用getMilliseconds(),但是:)
答案 5 :(得分:-1)
在javascript中使用此函数进行日期比较:
function fn_DateCompare(DateA, DateB) {
var a = new Date(DateA);
var b = new Date(DateB);
var msDateA = Date.UTC(a.getFullYear(), a.getMonth()+1, a.getDate());
var msDateB = Date.UTC(b.getFullYear(), b.getMonth()+1, b.getDate());
if (parseFloat(msDateA) < parseFloat(msDateB))
return -1; // less than
else if (parseFloat(msDateA) == parseFloat(msDateB))
return 0; // equal
else if (parseFloat(msDateA) > parseFloat(msDateB))
return 1; // greater than
else
return null; // error
}
答案 6 :(得分:-1)
我根据当前时间实施了以下代码进行日期比较 -
// get the current time from a hidden input which is being set by server time
// because client may have a wrong time
var ch = jQuery('#clockHours').val(); // e.g. 9,10 etc.
ch = parseInt(ch);
// get the today's date from a server value as well
var td = jQuery('#clockDate').val(); // may be => new Date(); e.g. 2014-05-15
td = Date.parse(td);
td.setHours(0, 0, 0, 0);
// get the input date
var inpdate = jQuery('#jform_in_date').val(); // may be => new Date(); e.g. 2014-05-15
inpdate = Date.parse(inpdate);
inpdate.setHours(0, 0, 0, 0);
// get yesterday's date. this is from server as well
yd = new Date();
yd.setFullYear(td.getFullYear(), td.getMonth(), td.getDate()-1);
yd.setHours(0, 0, 0, 0);
alert('today\'s date is: '+td.toString());
alert('yesterday\'s date is: '+yd.toString());
// if it is not 10 AM then dates from yesterday are valid
if(ch <= 9) {
if(inpdate.getTime() >= yd.getTime()) {
alert('Valid: dates from yesterday are allowed');
} else {
alert('Invalid: dates before yesterday are not allowed');
}
} else {
if(inpdate.getTime() >= td.getTime()) {
alert('Valid: dates from today are allowed');
} else {
alert('Invalid: dates before today are not allowed');
}
}
我希望这会非常清楚。