Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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 检查输入的日期时间是否超过72小时?_Javascript_Jquery_Date_Datetime - Fatal编程技术网

Javascript 检查输入的日期时间是否超过72小时?

Javascript 检查输入的日期时间是否超过72小时?,javascript,jquery,date,datetime,Javascript,Jquery,Date,Datetime,我有一个日期时间选择器,它为文本框生成以下格式的日期和时间 01 May, 2017 - 03:45 pm 现在我需要检查这个日期时间是否超过72小时。为此,我在Javascript中使用以下算法 function chk() { try { debugger; var a = document.getElementById("txtdate").value; var adatepart = a.substring(0, 12).replace(",", "");

我有一个日期时间选择器,它为
文本框
生成以下格式的日期和时间

01 May, 2017 - 03:45 pm
现在我需要检查这个日期时间是否超过72小时。为此,我在Javascript中使用以下算法

function chk() {
  try {
    debugger;
    var a = document.getElementById("txtdate").value;

    var adatepart = a.substring(0, 12).replace(",", "");

    //convert date part of txtbox
    var b = parseDate(adatepart);

    //getting number of hours of textbox from 1 jan 1970 midnight
    var seconds = new Date().getTime() / (3600 * 1000);

    //getting number of hours from 1 jan 1970
    var seconds1 = b.getTime() / (3600 * 1000);

    //adding additional hours and 12 hours if it's past noon
    seconds1 += parseInt(a.substring(15, 17)) + (a.substring(21, 23) == "pm" ? 12 : 0);
    var diff = seconds1 - seconds;
    if (diff > 72 || diff < 0) {
      alert("The selected date and time cannot be more than 72 hours from now");
    }
  } catch (err) {
    alert(err.message);
  }
}

function parseDate(input) {
  var map = { Jan: 0, Feb: 1, Mar: 2, Apr: 3, May: 4, Jun: 5, Jul: 6, Aug: 7, Sep: 8, Oct: 9, Nov: 10, Dec: 11 };
  input = input.split(" ");
  return new Date(input[2], input[1] in map ? map[input[1]] : input[1] - 1, input[0]);
}
函数chk(){
试一试{
调试器;
var a=document.getElementById(“txtdate”).value;
var adatepart=a.substring(0,12)。替换(“,”,”);
//转换txtbox的日期部分
var b=解析日期(adatepart);
//从1970年1月1日午夜开始获取文本框的小时数
var seconds=new Date().getTime()/(3600*1000);
//从1970年1月1日开始获取小时数
var seconds1=b.getTime()/(3600*1000);
//增加额外的小时数,如果超过中午则增加12小时
seconds1+=parseInt(a.substring(15,17))+(a.substring(21,23)=“pm”?12:0);
var diff=秒1-秒;
如果(差异>72 | |差异<0){
警报(“所选日期和时间不能超过72小时”);
}
}捕捉(错误){
警报(错误消息);
}
}
函数解析日期(输入){
var map={1月:0日,2月:1日,3月:2日,4月:3日,5月:4日,6月:5日,7月:6日,8月:7日,9月:8日,10月:9日,11月:10日,12月:11日};
输入=输入。拆分(“”);
返回新日期(在地图中输入[2],输入[1]?地图[输入[1]]:输入[1]-1,输入[0]);
}
这个算法运行良好。但我相信有一种较短的方法可以直接比较
文本框中的
日期。now
日期时间。也许通过jQuery。还有更短的路吗

使用

下面是如何在代码中实现它

function chk() {
  var txtDate = moment(document.getElementById("txtdate").value, "DD MMM, YYYY - hh:mm a");
  var diffInHours = txtDate.diff(moment(), 'hours');

  if (diff > 72 || diff < 0) {
    alert("The selected date and time cannot be more than 72 hours from now");
  }
};
函数chk(){
var txtDate=moment(document.getElementById(“txtDate”).value,“DD-MMM,YYYY-hh:mm-a”);
var diffInHours=txtDate.diff(矩(),'hours');
如果(差异>72 | |差异<0){
警报(“所选日期和时间不能超过72小时”);
}
};
现在,
diffingours
将在现在和所选日期时间之间有以小时为单位的时间差

您也不需要解析它。

从字符串“2017年5月1日-下午3:45”开始,您可以生成一个日期,减去72小时,然后查看它是否大于现在

有两个很好的库用于解析和格式化日期(例如and很好),或者您可以使用自定义函数

//解析日期格式为2017年5月1日下午3:45
函数解析日期(个){
变量月份=['1月'、'2月'、'3月'、'4月'、'5月'、'6月'、'7月'、'8月'、'9月'、'10月'、'11月'、'12月'];
var b=s.match(/\w+/g);
var invalidDate=新日期(NaN);
如果(!b | | b.length!=6)返回invalidDate;
var d=新日期(b[2],
months.indexOf(b[1].toLowerCase()),
b[0],
b[3]%12+(/pm/.test(b[5])?12:0),
b[4],);
返回isNaN(d)?无效日期:d;
}
//例子
var s='2017年5月1日至下午3:45';
var d=解析日期;
d、 setUTCHours(d.getUTCHours()-72);
log(“+s+”是否距离现在不到72小时?”+(d这可能会有所帮助

diff = (parseDate(e.substring(0, 12).replace(",", "")).getTime() / (3600 * 1000) + parseInt(e.substring(15, 17)) + (e.substring(21, 23) == "pm" ? 12 : 0)) - new Date().getTime() / (3600 * 1000);

if (diff < -72) {
//Your code 
}
diff=(parseDate(e.substring(0,12).替换(“,”,”).getTime()/(3600*1000)+parseInt(e.substring(15,17))+(e.substring(21,23)=“pm”?12:0))-新日期().getTime()/(3600*1000);
如果(差异<-72){
//你的代码
}

如果以可由
日期
对象构造函数解析的格式存储另一个变量,则可以轻松地比较两个日期对象,并检查它们之间的天数是否超过3天,使其成为一行:
(date2-date1)/1440000
解析也会考虑到日期的下午3:45部分,因为这是一个必要条件。试试看,这对这类事情很有用。