问题陈述: 我必须验证包含“开始日期”和“结束日期”字段的表单。
验证约束: 这两个日期之间的差异不得少于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“
注意:这两个日期对象也有时间值。
答案 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