Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中进行日期比较?_Javascript_Datetime - Fatal编程技术网

如何在Javascript中进行日期比较?

如何在Javascript中进行日期比较?,javascript,datetime,Javascript,Datetime,我想用javascript比较两个日期。我一直在做一些研究,但我能找到的只是如何返回当前日期。我想比较两个独立的日期,与今天无关。我该怎么做呢 var startDate = Date(document.form1.Textbox2); 您可以对日期对象使用getTime()方法来获取相对于1970年1月1日的时间戳(以毫秒为单位)。如果将两个日期转换为整数时间戳,则可以通过减去它们来比较差异。结果将以毫秒为单位,因此您只需除以1000表示秒,然后除以60表示分钟,等等。JavaScript的

我想用javascript比较两个日期。我一直在做一些研究,但我能找到的只是如何返回当前日期。我想比较两个独立的日期,与今天无关。我该怎么做呢

var startDate = Date(document.form1.Textbox2);

您可以对日期对象使用getTime()方法来获取相对于1970年1月1日的时间戳(以毫秒为单位)。如果将两个日期转换为整数时间戳,则可以通过减去它们来比较差异。结果将以毫秒为单位,因此您只需除以1000表示秒,然后除以60表示分钟,等等。

JavaScript的日期可以使用与其他数据类型使用的相同的比较运算符进行比较:>,我宁愿使用Date valueOf方法,而不是===或==


似乎===正在比较内部对象的引用,与日期无关。

您可以尝试添加以下脚本代码来实现此功能:

if(CompareDates(smallDate,largeDate,'-') == 0) {
    alert('Selected date must be current date or previous date!');
return false;
}

function CompareDates(smallDate,largeDate,separator) {
    var smallDateArr = Array();
    var largeDateArr = Array(); 
    smallDateArr = smallDate.split(separator);
    largeDateArr = largeDate.split(separator);  
    var smallDt = smallDateArr[0];
    var smallMt = smallDateArr[1];
    var smallYr = smallDateArr[2];  
    var largeDt = largeDateArr[0];
    var largeMt = largeDateArr[1];
    var largeYr = largeDateArr[2];

    if(smallYr>largeYr) 
        return 0;
else if(smallYr<=largeYr && smallMt>largeMt)
    return 0;
else if(smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt)
    return 0;
else 
    return 1;
}  
if(比较数据(smallDate,largeDate,'-')==0){
警报('所选日期必须是当前日期或以前的日期!');
返回false;
}
比较的函数(smallDate、largeDate、分隔符){
var smallDateArr=Array();
var largeDateArr=Array();
smallDateArr=smallDate.split(分隔符);
largeDateArr=largeDate.split(分隔符);
var smallDt=smallDateArr[0];
var smallMt=smallDateArr[1];
var smallYr=smallDateArr[2];
var largeDt=largeDateArr[0];
var largeMt=largeDateArr[1];
var largeYr=largeDateArr[2];
如果(小年>大年)
返回0;
else if(smallYrlargeMt)
返回0;
else if(smallYrlargeDt)
返回0;
其他的
返回1;
}  
新日期('1945/05/09')。valueOf()<新日期('2011/05/09')。valueOf()

您可以使用以下代码检查两个日期中格式为MM/DD/YYYY的日期值最高:

function d_check() {
    var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one
    var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two

    if((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) {
        alert("first date is greater");
        return false;
    }

    else if((((dl_sdt.substr(0,2)) > (dl_endt.
        substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))||
        (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&&
        ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))||
        (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > 
        (dl_endt.substr(3,2))))) {
            alert("first date is greater");
        return false;
    }

    alert("second date is digher");
    return true;
}
函数d_check(){
var dl_sdt=document.getElementIdBy(“date_input_Id1”).value;//date one
var dl_endt=document.getElementIdBy(“日期\输入\ Id2”).value;//日期二
如果((dl_sdt.substr(6,4))>(dl_endt.substr(6,4))){
警报(“第一个日期更大”);
返回false;
}
如果(((dl_sdt.substr(0,2))>(dl_endt。
子序列(0,2))&&(frdt(dl_sdt.子序列(3,2))>(dl_endt.子序列(3,2)))||
((dl_sdt.substr(0,2))>(dl_endt.substr(0,2)))&&
((dl_sdt.substr(3,2))<(dl_endt.substr(3,2)))||
((dl_sdt.substr(0,2))==(dl_endt.substr(0,2))&((dl_sdt.substr(3,2))>
(dl_endt.substr(3,2(()))){
警报(“第一个日期更大”);
返回false;
}
警报(“第二个日期是digher”);
返回true;
}
/*为检查此项,请创建一个表单并为两个日期输入提供id。日期格式应为mm/dd/yyyy或mm dd yyyy或mm:dd:yyyy或mm.dd.yyyy,如下所示*/

函数fn_DateCompare(DateA,DateB){//此函数适用于日期>1970年1月1日的情况
function fn_DateCompare(DateA, DateB) {     // this function is good for dates > 01/01/1970

    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;  // lt
    else if (parseFloat(msDateA) == parseFloat(msDateB))
      return 0;  // eq
    else if (parseFloat(msDateA) > parseFloat(msDateB))
      return 1;  // gt
    else
      return null;  // error
}
var a=新日期(DateA); var b=新日期(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)) 返回1;//gt 其他的 返回null;//错误 }
函数validateform()
{
if(trimAll(document.getElementById(“”.value)!=“”){
if(!isDate(trimAll(document.getElementById(“”.value)))
msg=msg+“
  • 请以mm/dd/yyyy格式输入有效起始日期\n”; 否则{ var toDate=新日期(); var txtdate=document.getElementById(“”)值; 变量d1=新日期(txtdate) 如果(Date.parse(txtdate)>Date.parse(toDate)){ msg=msg+“
  • 起始日期必须小于或等于今天的日期\n”; } } } if(trimAll(document.getElementById(“”.value)!=“”){ if(!isDate(trimAll(document.getElementById(“”.value))) msg=msg+“
  • 请以mm/dd/yyyy格式输入有效日期\n”; 否则{ var toDate=新日期(); var txtdate=document.getElementById(“”)值; 变量d1=新日期(txtdate) if(Date.parse(txtdate)>Date.parse(toDate)){ msg=msg+“
  • 截止日期必须小于或等于今天的日期\n”; } } }
  • 如果字符串无法解析为日期,会发生什么情况?这不适用于==(至少在firefox上是这样)。直接比较两个日期总是返回false,您必须使用上面提到的getTime()。在Visual Studio 2010 javascript调试器中:
    ?(新日期('1995-02-04T24:00')==新日期('1995-02-05T00:00');false
    ?(新日期('1995-02-04T24:00')。getTime()=新日期('1995-02-05T00:00')。getTime());true
    新日期(“2015年1月12日”)!==新日期(“2015年1月12日”),所以说你比较javascript日期,比如“其他数据类型”,充其量只是误导。被否决的。==,!=,==,!==,!==不起作用。而且,没有!==运算符。我有这个建议,但getTime函数返回一个未定义的值。我认为我不太理解getTime()。这应该是一个预定义的函数吗?希望这有助于chrome和firefox支持
    date1>date2
    ,也就是说,不支持getTime()部分。有人知道其他浏览器吗?@Linus我不相信实现会正确执行。安全总比抱歉好,是吗?@JonathanDumaine同意,认为它看起来更好:)功能非常好,除了一点。假设用户输入将始终遵循给定的日期模式(使用子字符串).我想我可能会用这个,不过需要一些输入验证,谢谢。这对日期格式做了一些大的假设,不使用国际化
    if(CompareDates(smallDate,largeDate,'-') == 0) {
        alert('Selected date must be current date or previous date!');
    return false;
    }
    
    function CompareDates(smallDate,largeDate,separator) {
        var smallDateArr = Array();
        var largeDateArr = Array(); 
        smallDateArr = smallDate.split(separator);
        largeDateArr = largeDate.split(separator);  
        var smallDt = smallDateArr[0];
        var smallMt = smallDateArr[1];
        var smallYr = smallDateArr[2];  
        var largeDt = largeDateArr[0];
        var largeMt = largeDateArr[1];
        var largeYr = largeDateArr[2];
    
        if(smallYr>largeYr) 
            return 0;
    else if(smallYr<=largeYr && smallMt>largeMt)
        return 0;
    else if(smallYr<=largeYr && smallMt==largeMt && smallDt>largeDt)
        return 0;
    else 
        return 1;
    }  
    
    new Date('1945/05/09').valueOf() < new Date('2011/05/09').valueOf()
    
    function d_check() {
        var dl_sdt=document.getElementIdBy("date_input_Id1").value; //date one
        var dl_endt=document.getElementIdBy("date_input_Id2").value; //date two
    
        if((dl_sdt.substr(6,4)) > (dl_endt.substr(6,4))) {
            alert("first date is greater");
            return false;
        }
    
        else if((((dl_sdt.substr(0,2)) > (dl_endt.
            substr(0,2)))&&(frdt(dl_sdt.substr(3,2)) > (dl_endt.substr(3,2))))||
            (((dl_sdt.substr(0,2)) > (dl_endt.substr(0,2)))&&
            ((dl_sdt.substr(3,2)) < (dl_endt.substr(3,2))))||
            (((dl_sdt.substr(0,2)) == (dl_endt.substr(0,2)))&&((dl_sdt.substr(3,2)) > 
            (dl_endt.substr(3,2))))) {
                alert("first date is greater");
            return false;
        }
    
        alert("second date is digher");
        return true;
    }
    
    function fn_DateCompare(DateA, DateB) {     // this function is good for dates > 01/01/1970
    
        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;  // lt
        else if (parseFloat(msDateA) == parseFloat(msDateB))
          return 0;  // eq
        else if (parseFloat(msDateA) > parseFloat(msDateB))
          return 1;  // gt
        else
          return null;  // error
    }
    
        function validateform()
        {
         if (trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value) != "") {
       if (!isDate(trimAll(document.getElementById("<%=txtFromDate.ClientID %>").value)))
             msg = msg + "<li>Please enter valid From Date in mm/dd/yyyy format\n";
       else {
           var toDate = new Date();
           var txtdate = document.getElementById("<%=txtFromDate.ClientID %>").value;
           var d1 = new Date(txtdate)
       if (Date.parse(txtdate) > Date.parse(toDate)) {                   
             msg = msg + "<li>From date must be less than or equal to today's date\n";
       }
      }
    }
    
         if (trimAll(document.getElementById("<%=txtToDate.ClientID %>").value) != "") {
                if (!isDate(trimAll(document.getElementById("<%=txtToDate.ClientID %>").value)))
                    msg = msg + "<li>Please enter valid To Date in mm/dd/yyyy format\n";
                else {
                    var toDate = new Date();
                    var txtdate = document.getElementById("<%=txtToDate.ClientID %>").value;
                    var d1 = new Date(txtdate)
    
                    if (Date.parse(txtdate) > Date.parse(toDate)) {
                        msg = msg + "<li>To date must be less than or equal to today's date\n"; 
                      }
                     }
                    }