使用JavaScript比较两个日期

使用JavaScript比较两个日期,javascript,date,datetime,compare,Javascript,Date,Datetime,Compare,有人能提出一种方法来比较两个日期的值吗?值将来自文本框。什么格式 var date = new Date(); // will give you todays date. // following calls, will let you set new dates. setDate() setFullYear() setHours() setMilliseconds() setMinutes() setMonth() setSeconds() setT

有人能提出一种方法来比较两个日期的值吗?值将来自文本框。

什么格式

var date = new Date(); // will give you todays date.

// following calls, will let you set new dates.
setDate()   
setFullYear()   
setHours()  
setMilliseconds()   
setMinutes()    
setMonth()  
setSeconds()    
setTime()

var yesterday = new Date();
yesterday.setDate(...date info here);

if(date>yesterday)  // will compare dates
如果构建Javascript,只需减去它们就可以得到毫秒差(编辑:或只是比较它们):


将按照您的意愿执行-为每个日期构造一个,然后使用
比较它们,以便从Javascript中的自由文本创建日期,您需要将其解析为date()对象

您可以使用Date.parse()将自由文本转换为新日期,但如果您可以控制页面,我建议您使用HTML选择框或日期选择器,如或


一旦你有了别人指出的日期,你就可以用简单的算术方法减去日期,然后用一天中的秒数(60*60*24=86400)除以这个数字(以秒为单位),把它转换回天数在javascript中比较日期的最简单方法是首先将其转换为日期对象,然后比较这些日期对象

下面是一个具有三个功能的对象:

  • 日期。比较(a,b)

    返回一个数字:

    • -1如果a
    • 如果a=b,则为0
    • 1如果a>b
    • 如果a或b是非法日期,则为NaN
  • 日期。在范围内(d,开始,结束)

    返回布尔值或NaN值:

    • 如果d在开始和结束之间(包括开始和结束),则为true
    • 如果d在开始之前或结束之后,则为false
    • 如果一个或多个日期是非法的,则为NaN
  • 日期。转换

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

    • 日期对象:输入按原样返回
    • 数组:解释为[年、月、日]注意月份为0-11
    • a数字:解释为自1970年1月1日以来的毫秒数(时间戳)
    • 字符串:支持几种不同的格式,如“YYYY/MM/DD”、“MM/DD/YYYY”、“2009年1月31日”等
    • 对象:解释为具有年、月和日期属性的对象注意月份为0-11

//来源:http://stackoverflow.com/questions/497790
变量日期={
转换:函数(d){
//将d中的日期转换为日期对象。输入可以是:
//日期对象:未经修改返回
//数组:解释为[年、月、日]。注意:月为0-11。
//数字:解释为毫秒数
//自1970年1月1日起(时间戳)
//字符串:javascript引擎支持的任何格式,如
//“YYYY/MM/DD”、“MM/DD/YYYY”、“2009年1月31日”等。
//对象:解释为具有年、月和日期的对象
//属性。**注意**月份为0-11。
返回(
d、 构造函数===日期?d:
d、 构造函数===数组?新日期(d[0],d[1],d[2]):
d、 构造函数===编号?新日期(d):
d、 构造函数===字符串?新日期(d):
d的类型==“对象”?新日期(d.年、d.月、d.日期):
楠
);
},
比较:功能(a、b){
//比较两个日期(可以是转换支持的任何类型)
//函数)并返回:
//-1:如果ab
//如果a或b是非法日期
//注意:isFinite中的代码执行赋值(=)。
返回(
isFinite(a=this.convert(a).valueOf()&&
isFinite(b=this.convert(b).valueOf())?

(a>b)-(a假设得到日期对象a和b,得到它们的EPOC时间值,然后减去以毫秒为单位的差值

var diff = +A - +B;

仅此而已。

由“some”发布的代码的改进版本


到目前为止,最简单的方法是从另一个日期中减去一个日期,然后比较结果

var-oDateOne=新日期();
var oDateTwo=新日期();
警报(oDateOne-oDateTwo==0);
警报(oDateOne-oDateTwo<0);

警报(oDateOne-oDateTwo>0);
如果以下是您的日期格式,您可以使用此代码:

var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
   //...
}
它将检查
20121121
编号是否大于
20121103

        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }
使用此代码可以使用javascript比较日期

谢谢 D.Jeeva

您使用此代码

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");
  }
并检查此链接

我通常将日期作为时间戳(数字)
存储在数据库中

当我需要比较时,我只需比较这些时间戳或


将其转换为日期对象,然后与
进行比较减去两个日期以毫秒为单位获得差值,如果得到
0
则为相同的日期

function areSameDate(d1, d2){
    return d1 - d2 === 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
Date.valueOf()都返回自1970年1月1日00:00 UTC以来的毫秒数。
number
函数和一元
+
运算符都调用
valueOf()
幕后的方法。

像往常一样比较
,但是任何涉及
=
的内容都应该使用
+
前缀。例如:

var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}
const x=新日期('2013-05-23');
常数y=新日期('2013-05-23');
//小于、大于都可以:
console.log('xy',x>y);//false
log('x==y',x==y);//错误,糟糕!
//任何涉及“=”的内容都应使用“+”前缀
//然后,它将比较日期的毫秒值
console.log('+x=+y',+x>=+y);//true
console.log('+x===+y',+x===+y);//true<
  var a = new Date(2011, 1-1, 1);
  var b = new Date(2011, 1-1, 1);
  var c = new Date(2011, 1-1, 31);
  var d = new Date(2011, 1-1, 31);

  assertEquals( 0, a.compare(b));
  assertEquals( 0, b.compare(a));
  assertEquals(-1, a.compare(c));
  assertEquals( 1, c.compare(a));
var first = '2012-11-21';
var second = '2012-11-03';
if(parseInt(first.replace(/-/g,""),10) > parseInt(second.replace(/-/g,""),10)){
   //...
}
        from_date ='10-07-2012';
        to_date = '05-05-2012';
        var fromdate = from_date.split('-');
        from_date = new Date();
        from_date.setFullYear(fromdate[2],fromdate[1]-1,fromdate[0]);
        var todate = to_date.split('-');
        to_date = new Date();
        to_date.setFullYear(todate[2],todate[1]-1,todate[0]);
        if (from_date > to_date ) 
        {
            alert("Invalid Date Range!\nStart Date cannot be after End Date!")

            return false;
        }
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");
  }
var timestamp_1970 = new Date(0).getTime(); // 1970-01-01 00:00:00
var timestamp = new Date().getTime(); // Current Timestamp
var timestamp = 0; // 1970-01-01 00:00:00
var DateObject = new Date(timestamp);
function areSameDate(d1, d2){
    return d1 - d2 === 0
}
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 above
 */
d1.getTime() == d2.getTime(); // true
d1.valueOf() == d2.valueOf(); // true
Number(d1)   == Number(d2);   // true
+d1          == +d2;          // true
var curDate=new Date();
var startDate=document.forms[0].m_strStartDate;

var endDate=document.forms[0].m_strEndDate;
var startDateVal=startDate.value.split('-');
var endDateVal=endDate.value.split('-');
var firstDate=new Date();
firstDate.setFullYear(startDateVal[2], (startDateVal[1] - 1), startDateVal[0]);

var secondDate=new Date();
secondDate.setFullYear(endDateVal[2], (endDateVal[1] - 1), endDateVal[0]);
if(firstDate > curDate) {
    alert("Start date cannot be greater than current date!");
    return false;
}
if (firstDate > secondDate) {
    alert("Start date cannot be greater!");
    return false;
}
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
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 
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
function CompareDate(tform){
     var startDate = new Date(document.getElementById("START_DATE").value.substring(0,10));
     var endDate = new Date(document.getElementById("END_DATE").value.substring(0,10));

     if(tform.START_DATE.value!=""){
         var estStartDate = tform.START_DATE.value;
         //format for Oracle
         tform.START_DATE.value = estStartDate + " 00:00:00";
     }

     if(tform.END_DATE.value!=""){
         var estEndDate = tform.END_DATE.value;
         //format for Oracle
         tform.END_DATE.value = estEndDate + " 00:00:00";
     }

     if(endDate <= startDate){
         alert("End date cannot be smaller than or equal to Start date, please review you selection.");
         tform.START_DATE.value = document.getElementById("START_DATE").value.substring(0,10);
         tform.END_DATE.value = document.getElementById("END_DATE").value.substring(0,10);
         return false;
     }
}
Date.prototype.sameDay = function(d) {
  return this.getFullYear() === d.getFullYear()
    && this.getDate() === d.getDate()
    && this.getMonth() === d.getMonth();
}
if(date1.sameDay(date2)) {
    // highlight day on calendar or something else clever
}
var date_today=new Date();
var formated_date = formatDate(date_today);//Calling formatDate Function

var input_date="2015/04/22 11:12 AM";

var currentDateTime = new Date(Date.parse(formated_date));
var inputDateTime   = new Date(Date.parse(input_date));

if (inputDateTime <= currentDateTime){
    //Do something...
}

function formatDate(date) {
    var hours = date.getHours();
    var minutes = date.getMinutes();
    var ampm = hours >= 12 ? 'PM' : 'AM';

    hours = hours % 12;
    hours = hours ? hours : 12; // the hour '0' should be '12'
    hours   = hours < 10 ? '0'+hours : hours ;

    minutes = minutes < 10 ? '0'+minutes : minutes;

    var strTime = hours+":"+minutes+ ' ' + ampm;
    return  date.getFullYear()+ "/" + ((date.getMonth()+1) < 10 ? "0"+(date.getMonth()+1) :
    (date.getMonth()+1) ) + "/" + (date.getDate() < 10 ? "0"+date.getDate() :
    date.getDate()) + " " + strTime;
}
function compare(dateTimeA, dateTimeB) {
    var momentA = moment(dateTimeA,"DD/MM/YYYY");
    var momentB = moment(dateTimeB,"DD/MM/YYYY");
    if (momentA > momentB) return 1;
    else if (momentA < momentB) return -1;
    else return 0;
}

alert(compare("11/07/2015", "10/07/2015"));
var date1= new Date("01/01/2014").setHours(0,0,0,0);

var date2= new Date("01/01/2014").setHours(0,0,0,0);
var date1 = '01/12/2018';
var date2 = '12/12/2018';
date1 = new Date(date1);
date2 = new Date(date2);
date1 > date2;  //false
date1 < date2;  //true
date1 >= date2; //false
date1 <= date2; //true
// create a date (utc midnight) reflecting the value of myDate and the environment's timezone offset.
new Date(Date.UTC(myDate.getFullYear(),myDate.getMonth(), myDate.getDate()));
// the date in London of a moment in time. Device timezone is ignored.
new Date(Date.UTC(myDate.getUTCYear(), myDate.getyUTCMonth(), myDate.getUTCDate()));
var first = '2012-11-21';
var second = '2012-11-03';

if (new Date(first) > new Date(second) {
    .....
}