javascript的日期时间比较和日期时间差异

javascript的日期时间比较和日期时间差异,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我在简单的日期时间比较和日期时间不同方面失败了 我的输入来自jquery UI datetimepicker var dt1 = $('#datetimepicker1').val(); //2012-08-12 13:49 var dt2 = $('#datetimepicker2').val(); //2012-08-14 14:21 if( (dt1!="") && (dt2!="") ){ var d1 = Date.parse(dt1); // return N

我在简单的日期时间比较和日期时间不同方面失败了 我的输入来自jquery UI datetimepicker

var dt1 = $('#datetimepicker1').val(); //2012-08-12 13:49
var dt2 = $('#datetimepicker2').val(); //2012-08-14 14:21
if( (dt1!="") && (dt2!="") ){
    var d1 = Date.parse(dt1); // return NaN
    var dd1 = new Date(Date.parse(dt1));    // return Invalid Date
    var ddd1 = dt1.getTime() // added this, the entire script no functioning
    alert (dt1 +":"+ d1 + ":"+ dd1 +"\n"+ ddd1);
}
有人知道我做错了什么吗?
首选javascript解决方案。

按照问题中提供的格式尝试此方法
2012-08-12 13:49

要找出两个日期在天内的差异:小时:分钟你可以这样做

function ConvertMilliSecondsToTimeSpan(t){
    var cd = 24 * 60 * 60 * 1000,
        ch = 60 * 60 * 1000,
        d = Math.floor(t / cd),
        h = '0' + Math.floor( (t - d * cd) / ch),
        m = '0' + Math.round( (t - d * cd - h * ch) / 60000);
    return [d, h.substr(-2), m.substr(-2)].join(':');
}

var dt1 = Date.parse("2012-08-12 13:49");
var dt2 = Date.parse("2012-08-11 14:21");

alert("Difference: Days:Hours:Minutes " + ConvertMilliSecondsToTimeSpan(Math.abs(dt2 - dt1)));
​
var dt1=“2012-08-12 13:49”; var dt2=“2012-08-14:21”; 如果((dt1!=“”)和&(dt2!=“”){ var d1=新日期(dt1.拆分(“”)。合并(“”); var d2=新日期(dt2.拆分(“”)。加入(“”); var diff=d2-d1;//以毫秒为单位的差异 //控制台日志(d1,d2,差异/(60*60*24*1000)); 警报(d1); 警报(d2); 如果(差异>0){ 警报(d1+在“+d2”之前); }否则如果(差异<0){ 警报(d2+“在”+d1之前); }否则{ 警报(d2+“在”+d1之前); } 警报(算术平均值(差值/(60*60*24*1000)).toFixed(2)+“天”); }
事实上,你的代码看起来像是真的,但事实并非如此。解析时 从字符串中,使用Date.parse可以使用字符串的格式。我试着把一切都提出来。 尝试传递以下格式的字符串

格式为:YYYY-MM-DDTHH:MM:ss.sssZ。“Z”部分表示可选时区。也可以使用子窗体:

   <ol>
    <li>YYYY
    <li>YYYY-MM
    <li>YYYY-MM-DD
    <li>THH:mm   // example: 'T12:00'
    <li>THH:mm:ss
    <li>THH:mm:ss.sss
    </ol>
所以让我们把这个问题应用到你们身上。这对我来说是一个有用的输出

      //var dt1 = $('#datetimepicker1').val(); //2012-08-12 13:49
                   // var dt2 = $('#datetimepicker2').val(); //2012-08-14 14:21
           I realize that at least you are able to get dt1 and dt2 with values I assigned to date1 and date2, if so put the below code and see if you get the output .
        var date1 ="2012-08-12 13:49";
        var date2 ="2012-08-14 14:21";
        var dt1=date1.split(" ").join("T");//2012-08-12T13:49
        var dt2=date2.split(" ").join("T");//=>2012-08-14T14:21

        if((dt1!="") && (dt2!="")){
        alert(dt1);
            var d1 = Date.parse(dt1); // return good output  1344768540000
     var d2 = Date.parse(dt2);  //return 1344943260000 Now you can compare d1 and d2   values

var dd1 = new Date(Date.parse(dt1));  // returned  Sun Aug 12 2012 13:49:00 GMT+0300 (Egypt Standard Time)
            var ddd1 = dd1.getTime(); // work fine 1344768540000 dt1 is a string can't work here

            alert (dt1 +":"+ d1 + ":"+ dd1 +"\n"+ ddd1);   // return   2012-08-12T13:49:1344768540000:Sun Aug 12 2012 13:49:00 GMT+0300 (Egypt Standard Time)
        1344768540000
        }

简单而清晰的方法,它不产生额外的js日期对象或需要任何解析

// get epoch of datepicker 1
var dt1 = $('#datetimepicker1').datepicker('getDate').getTime(); 
// get epoch of datepicker 2
var dt2 = $('#datetimepicker2').datepicker('getDate').getTime(); 
// ensure both evaluate to true
if(dt1 && dt2){
     if(dt1 < dt2){
        //dt1 is earlier
     }else if(dt1 > dt2){
        //dt1 is later
     }else{
        //dates are equal
     }
}
//获取日期选择器1的纪元
var dt1=$('#datetimepicker1').datepicker('getDate').getTime();
//获取日期选择器2的历元
var dt2=$('#datetimepicker2').datepicker('getDate').getTime();
//确保两者的评估结果均为真
如果(dt1和dt2){
如果(dt1dt2){
//dt1更晚
}否则{
//日期是相等的
}
}

如果您发现自己正在使用datetime重的应用程序,请使用更灵活的API包装本机Date对象。

试试。好的,根据您的建议,我可以进行比较,但如何使datetime不同?返回。。。d1=1344752760000 d2=1344753180000 d1-d2=420000将
-
更改为
/
。这是一个更容易接受的版本。e、 g.
dt1=dt1.替换(/-/g,“/”)如何在“注释”中复制和粘贴我的解决方案?在我粘贴的地方,它变成了-个字符?我按照你提供的格式做了,我用演示更新了我的答案。好的,日期比较完成了,日期时间的不同如何?基于diobe(上图)的解决方案,他的答案是day basic,我希望以相同的格式返回。例如000-00-02 01:29(2天1小时29分钟),我将其修改为inI,添加了代码,用于找出天的差异:小时:分钟,我希望这是您想要的。您的代码在@side运行良好,但是如果dt1和dt2来自具有datepicker的jquery UI的输入文本,则整个函数不可用,从您的代码来看,我确实找到了一些解决办法,谢谢,在这种情况下,其实很简单。您可以使用datepicker函数获取日期:很抱歉,我无法更改输入格式,因为它来自jquery UI datepicker。如果您按照您的注释获取dt1和dt2值,请在我尝试编辑代码时查看输出。我认为它对我来说100%有效。现在你可以比较d1和d2的值
      //var dt1 = $('#datetimepicker1').val(); //2012-08-12 13:49
                   // var dt2 = $('#datetimepicker2').val(); //2012-08-14 14:21
           I realize that at least you are able to get dt1 and dt2 with values I assigned to date1 and date2, if so put the below code and see if you get the output .
        var date1 ="2012-08-12 13:49";
        var date2 ="2012-08-14 14:21";
        var dt1=date1.split(" ").join("T");//2012-08-12T13:49
        var dt2=date2.split(" ").join("T");//=>2012-08-14T14:21

        if((dt1!="") && (dt2!="")){
        alert(dt1);
            var d1 = Date.parse(dt1); // return good output  1344768540000
     var d2 = Date.parse(dt2);  //return 1344943260000 Now you can compare d1 and d2   values

var dd1 = new Date(Date.parse(dt1));  // returned  Sun Aug 12 2012 13:49:00 GMT+0300 (Egypt Standard Time)
            var ddd1 = dd1.getTime(); // work fine 1344768540000 dt1 is a string can't work here

            alert (dt1 +":"+ d1 + ":"+ dd1 +"\n"+ ddd1);   // return   2012-08-12T13:49:1344768540000:Sun Aug 12 2012 13:49:00 GMT+0300 (Egypt Standard Time)
        1344768540000
        }
// get epoch of datepicker 1
var dt1 = $('#datetimepicker1').datepicker('getDate').getTime(); 
// get epoch of datepicker 2
var dt2 = $('#datetimepicker2').datepicker('getDate').getTime(); 
// ensure both evaluate to true
if(dt1 && dt2){
     if(dt1 < dt2){
        //dt1 is earlier
     }else if(dt1 > dt2){
        //dt1 is later
     }else{
        //dates are equal
     }
}