javascript - JavaScript 比较两个日期

  显示原文与译文双语对照的内容

有人可以提出一种方法来比较过去使用JavaScript的两个日期的值大于,小于和不在过去? 这些值将来自文本框。

时间:

使用通常的operators, 日期对象会做什么,你想让- 构建了一个为每个日期,那就直接拿这些。

我建议你使用drop-downs或者一些类似的约束形式,而不是文本框,以免你发现自己在输入验证的地狱。

比较javascript中日期的最简单方法是首先将它转换为一个日期对象,然后比较这些 date-objects 。

在下面你可以找到一个具有三个函数的对象:

  • dates.compare(a,b)

    返回一个数字:

    • -1如果 <
    • 0 如果=
    • 1 如果>
    • NaN如果a 或者b 是非法日期
  • dates.inRange ( 开始,开始,结束)

    返回布尔值或者 NaN:

    • 如果 d 真 和 结束开始( 包含) 之间的是
    • 经过结尾, 假 开始之前如果 d 是带有或者
    • NaN如果一个或者多个日期是非法的。
  • dates.convert

    由其他函数用来将它们的输入转换为日期对象。 输入可以是

    • 一个的日期 -object: 输入返回为。
    • 一个数组: 解释为 [year,month,day] 。 便笺月为 0 -11.
    • 一个: 解释为毫秒数因为 1 1970年月 ( 时间戳)
    • 也支持一个字符串: 几种不同的格式,比如"YYYY/MM/DD","MM/DD/YYYY","jan 31 2009"等等。
    • 一个对象: 解释为具有年,月和日期属性的对象。 便笺月为 0 -11.

//Source: http://stackoverflow.com/questions/497790
var dates = {
 convert:function(d) {
//Converts the date in d to a date-object. The input can be:
//a date object: returned without modification
//an array : Interpreted as [year,month,day]. NOTE: month is 0-11.
//a number : Interpreted as number of milliseconds
//since 1 Jan 1970 (a timestamp) 
//a string : Any format supported by the javascript engine, like
//"YYYY/MM/DD","MM/DD/YYYY","Jan 31 2009" etc.
//an object : Interpreted as an object with year, month and date
//attributes. **NOTE** month is 0-11.
 return (
 d.constructor === Date? d :
 d.constructor === Array? new Date(d[0],d[1],d[2]) :
 d.constructor === Number? new Date(d) :
 d.constructor === String? new Date(d) :
 typeof d ==="object"? new Date(d.year,d.month,d.date) :
 NaN
 );
 },
 compare:function(a,b) {
//Compare two dates (could be of any type supported by the convert
//function 上面) and returns:
//-1 : if a <b
//0 : if a = b
//1 : if a> b
//NaN : if a or b is an illegal date
//NOTE: The code inside isFinite does an assignment (=).
 return (
 isFinite(a=this.convert(a).valueOf()) &&
 isFinite(b=this.convert(b).valueOf())?
 (a>b)-(a<b) :
 NaN
 );
 },
 inRange:function(d,start,end) {
//Checks if date in d is between dates in start and end.
//Returns a boolean or NaN:
//true : if d is between start and end (inclusive)
//false : if d is before start or after end
//NaN : if one or more of the dates is illegal.
//NOTE: The code inside isFinite does an assignment (=).
 return (
 isFinite(d=this.convert(d).valueOf()) &&
 isFinite(start=this.convert(start).valueOf()) &&
 isFinite(end=this.convert(end).valueOf())?
 start <= d && d <= end :
 NaN
 );
 }
}

更新了 26 Februari 2011,并在代码( 代码未被更改) 中包含文档。

比较 <> 一样,但是涉及 =的任何内容都应该使用 + 前缀。 就像这样:


var x = new Date('2013-05-23');
var y = new Date('2013-05-23');

//less than, greater than is fine:
x <y; => false
x> y; => false
x === y; => false, oops!

//anything involving '=' should use the '+' prefix
//it will then compare the dates' millisecond values
+x <= +y; => true
+x> = +y; => true
+x === +y; => true

希望有帮助!

到目前为止最简单的方法是从另一个开始减去一个日期并比较结果。


var oDateOne = new Date();
var oDateTwo = new Date();

alert(oDateOne - oDateTwo === 0);
alert(oDateOne - oDateTwo <0);
alert(oDateOne - oDateTwo> 0);

关系运算符 <<=>>= 可以用于比较JavaScript日期:


var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 2);
d1 <d2;//true
d1 <= d2;//true
d1> d2;//false
d1> = d2;//false

但是,相等运算符 ==!====!== 不能用于比较( 值的值) 日期 ,因为:

  • 两个不同的对象对于严格比较或者抽象比较都不相等。
  • 比较对象的表达式仅在操作数引用相同对象时才为真。

可以使用以下任一方法比较相等日期的值:


var d1 = new Date(2013, 0, 1);
var d2 = new Date(2013, 0, 1);
/*
 * note: d1 == d2 returns false as described 上面
 */
d1.getTime() == d2.getTime();//true
d1.valueOf() == d2.valueOf();//true
Number(d1) == Number(d2);//true
+d1 == +d2;//true

Date.getTime()Date.valueOf() 都返回自 1年 1970月 00日年月00日之后的毫秒数。 Number 函数和一元 + 操作符调用场景后面的valueOf() 方法。

什么格式?

如果你构造一个 Javascript 日期对象,你可以只减去它们以获得毫秒差( 编辑: 或者只是比较一下:


js>t1 = new Date()
Thu Jan 29 2009 14:19:28 GMT-0500 (Eastern Standard Time)
js>t2 = new Date()
Thu Jan 29 2009 14:19:31 GMT-0500 (Eastern Standard Time)
js>t2-t1
2672
js>t3 = new Date('2009 Jan 1')
Thu Jan 01 2009 00:00:00 GMT-0500 (Eastern Standard Time)
js>t1-t3
2470768442
js>t1>t3
true


function datesEqual(a, b)
{
 return (!(a>b || b>a))
}

你可以使用这里代码,


var firstValue ="2012-05-12".split('-');
var secondValue ="2014-07-12".split('-');

 var firstDate=new Date();
 firstDate.setFullYear(firstValue[0],(firstValue[1] - 1 ),firstValue[2]);

 var secondDate=new Date();
 secondDate.setFullYear(secondValue[0],(secondValue[1] - 1 ),secondValue[2]); 

 if (firstDate> secondDate)
 {
 alert("First Date is greater than Second Date");
 }
 else
 {
 alert("Second Date is greater than First Date");
 }

并检查这里链接 http://www.w3schools.com/js/js_obj_date.asp

磅的回答

在行动,这里是一个函数,它返回从日期时间与日期时间 > {boolean} 如果演示


var from = '08/19/2013 00:00'
var to = '08/12/2013 00:00 '

function isFromBiggerThanTo(dtmfrom, dtmto){
 return new Date(dtmfrom).getTime()> = new Date(dtmto).getTime() ;
}
console.log(isFromBiggerThanTo(from, to));//true

解释解释

jsFiddle


var date_one = '2013-07-29 01:50:00',
date_two = '2013-07-29 02:50:00';
//getTime() returns the number of milliseconds since 01.01.1970.
var timeStamp_date_one = new Date(date_one).getTime() ;//1375077000000 
console.log(typeof timeStamp_date_one);//number 
var timeStamp_date_two = new Date(date_two).getTime() ;//1375080600000 
console.log(typeof timeStamp_date_two);//number 

由于你现在拥有的日期时间类型是 datetime,所以你可以将它们与任何逻辑操作进行比较

(>,<,=,=,==,==,> = 和 <= ) !

在日期时间字符串或者 unix format,如果你熟悉 C# 自定义日期和时间格式字符串这个库只需要做完全一样的东西,帮助你格式化你的日期和时间 dtmFRM 无论你是传递

用法


var myDateTime = new dtmFRM();

alert(myDateTime.ToString(1375077000000,"MM/dd/yyyy hh:mm:ss ampm"));
//07/29/2013 01:50:00 AM

alert(myDateTime.ToString(1375077000000,"the year is yyyy and the day is dddd"));
//this year is 2013 and the day is Monday

alert(myDateTime.ToString('1/21/2014',"this month is MMMM and the day is dd"));
//this month is january and the day is 21

演示

在图书馆 js file, pacified你所要做的就是通过上任意格式

为了给许多现存选项添加另一个可能性,你可以尝试:


if (date1.valueOf()==date2.valueOf()).. ...

。这似乎能为我工作。 当然,你必须确保两个日期都不是未定义的。。


if ((date1?date1.valueOf():0)==(date2?date2.valueOf():0).. ...

通过这种方式进行比较,我们可以确保一个积极的,如果同时也是未定义的,或者-


if ((date1?date1.valueOf():0)==(date2?date2.valueOf():-1).. ...

如果你喜欢它们不相等。

...