1

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

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

示例:无效案例:SDate:“01-10-2012 11:59” EDate:““02-10-2012 00:00”

日期:“2012 年 1 月 10 日 02:20” 日期:“2012 年 2 月 10 日 02:00”

有效案例:

日期:“2012 年 1 月 10 日 02:20” 日期:“2012 年 2 月 10 日 03:30”

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

4

6 回答 6

1

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

于 2012-11-16T09:22:11.050 回答
1

一旦你解析了 2 个字符串并创建了相应的Date对象,你只需要使用:

function isValid(startDate, endDate) {
  return endDate - startDate > 24 * 60 * 60 * 1000;
}
于 2012-11-16T09:24:37.260 回答
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' - 天。您可以根据自己的选择扩展它:天、月等。

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

从您的格式解析日期:

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]);
于 2012-11-16T09:23:12.060 回答
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';
}
于 2012-11-16T09:26:36.050 回答
0

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

我建议使用可以处理该格式的第三方库,或者使用简单的字符串操作并使用Data构造函数的版本,该版本为每个(year, month, date, hour, minute, seconds)获取六个单独的字段。

完成此操作后,测试两个 JavaScriptDate对象是否相隔超过 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;
于 2012-11-16T09:28:18.603 回答
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;
}

好的,非常感谢您的宝贵意见和建议。我有一个混合了你的想法的解决方案。

解决方案:

1.制作了一个自定义函数,根据指定的格式返回日期对象。

2.现在 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

于 2012-11-16T10:17:55.477 回答