在javascript中查找两个日期时间之间的差异

时间:2012-11-16 09:16:21

标签: javascript datetime

问题陈述: 我必须验证包含“开始日期”和“结束日期”字段的表单。

验证约束: 这两个日期之间的差异不得少于24小时。

实施例: 案件无效: SDate:“01-10-2012 11:59” 编辑:“”02-10-2012 00:00“

SDate:“01-10-2012 02:20” 编辑:“”02-10-2012 02:00“

有效案例:

SDate:“01-10-2012 02:20” 编辑:“”02-10-2012 03:30“

注意:这两个日期对象也有时间值。

6 个答案:

答案 0 :(得分:1)

看看moment.js。它几乎肯定会做你想要的。

答案 1 :(得分:1)

解析了2个字符串并创建了相应的Date对象后,您只需使用:

function isValid(startDate, endDate) {
  return endDate - startDate > 24 * 60 * 60 * 1000;
}

答案 2 :(得分:0)

        function(start, end, unit){
            var denom = 1,
                diff = end.getTime() - start.getTime();

            if(unit == 's'){ 
                denom = 1000;
            }
            else if(unit == 'm'){
                denom = 1000*60;
            }
            else if(unit == 'h'){
                denom = 1000*60*60;
            }
            return Math.round(diff/denom);
        }

单位可以是's' - 秒,'m' - 分钟,'h' - 天。您可以根据自己的选择进行扩展:天,月等。

您还应首先将日期解析为javascript Date对象。你需要帮助吗?

从您的格式解析日期:

var p = "01-10-2012 05:30".match(/(\d{2})-(\d{2})-(\d{4}) (\d{2}):(\d{2})/);
parsedDate = new Date(parseInt(p[3]) - 1900, parseInt(p[2]) - 1, p[1], p[4], p[5]);

答案 3 :(得分:0)

您可以使用它来计算差异并执行验证:

 Date.daysBetween = function( date1, date2 ) {
  //Get 1 day in milliseconds
  var one_day=1000*60*60*24;

  // Convert both dates to milliseconds
  var date1_ms = date1.getTime();
  var date2_ms = date2.getTime();

  // Calculate the difference in milliseconds
  var difference_ms = date2_ms - date1_ms;
  //take out milliseconds
  difference_ms = difference_ms/1000;
  var seconds = Math.floor(difference_ms % 60);
  difference_ms = difference_ms/60; 
  var minutes = Math.floor(difference_ms % 60);
  difference_ms = difference_ms/60; 
  var hours = Math.floor(difference_ms % 24);  
  var days = Math.floor(difference_ms/24);

  return days + ' days, ' + hours + ' hours, ' + minutes + ' minutes, and ' + seconds + ' seconds';
}

答案 4 :(得分:0)

困难的部分是将字符串转换为有效的Date对象,特别是因为您使用的是非标准日期格式。

我建议使用可以处理该格式的第三方库,或者使用简单的字符串操作并使用Data构造函数的版本,每个需要6个单独的字段(年,月) ,日期,小时,分钟,秒)

完成此操作后,测试两个JavaScript Date对象是否超过24小时是很容易的 - 只需取出它们的数值并检查它是否超过86400000(一天中的毫秒数)。

var t1 = new Date(Y1, M1, D1, hh1, mm1, ss1);
var t2 = new Date(Y2, M2, D2, hh2, mm2, ss2);

var valid = (t2 - t1) >= 86400000;

答案 5 :(得分:0)

  /** Method: getDateObject
   * 
   * Description: 
   * gives date object from string 
   * @param dateString
   * @param separator used
   * @returns corresponding date object 
   */

function getDateObject(dateString, parseFormat) {
//This function return a date object after accepting

 if(dateString!=null && dateString!=undefined && dateString!="")
 {
  var dateFormat = sessvars.currentUser.options.dateFormat;
  if(parseFormat.length==0)
      parseFormat = [dateFormat + " HH:mm:ss", dateFormat + " HH:mm",dateFormat];

  var dtObject = Date.parseExact(dateString, parseFormat);  
  return dtObject;
 }
else
  return dateString;
}

Ok Thanx很多人提供宝贵的意见和建议。我有一个混合你的想法的解决方案。

解决方案:

1.根据指定的格式创建一个返回日期对象的自定义函数。

2.Now getTime()给出毫秒值。

3.SDate.getTime() - EDate.getTime()< 24 * 3600 * 1000

示例:

getDateObject(" 01-10-2012 05:30",[])。getTime() - getDateObject(" 02-10-2012 05:30",[]) .getTime()< 24 * 3600 * 1000