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

时间:2017-04-20 08:15:35

标签: javascript jquery date datetime

我有一个DateTime选择器,可以按以下格式生成textbox的日期和时间,

01 May, 2017 - 03:45 pm

现在我需要检查此DateTime是否超过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]);
}

此算法运行正常。但我相信我可以通过较短的方式直接比较date.now中的datetimetextbox。也许通过jQuery。有没有更短的方式?

3 个答案:

答案 0 :(得分:1)

  

使用moment.js

以下是在代码中实现它的方法,

std::list

现在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"); } }; 将具有从现在到所选日期时间之间的小时数差异。

您也不需要解析它。

答案 1 :(得分:1)

这可能会有帮助

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 
}

答案 2 :(得分:0)

从字符串&#34; 2017年5月1日 - 下午03:45&#34;开始,您可以生成一个日期,减去72小时,然后查看它是否比现在更大。

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

&#13;
&#13;
// Parse date in format 01 May, 2017 - 03:45 pm
function parseDate(s) {
  var months = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'];
  var b = s.match(/\w+/g);
  var invalidDate = new Date(NaN);
  if (!b || b.length != 6) return invalidDate;

  var d = new Date(b[2],
                   months.indexOf(b[1].toLowerCase()),
                   b[0],
                   b[3]%12 + (/pm/.test(b[5])? 12 : 0),
                   b[4],);
   return isNaN(d)? invalidDate : d;  
}

// Examples
var s = '01 May, 2017 - 03:45 pm';
var d = parseDate(s);
d.setUTCHours(d.getUTCHours() - 72);

console.log('Is ' + s + ' less than 72 hours from now? ' + (d < Date.now));

var s = '22 Apr, 2017 - 03:45 pm';
var d = parseDate(s);
d.setUTCHours(d.getUTCHours() - 72);

console.log('Is ' + s + ' less than 72 hours from now? ' + (d < Date.now()));
&#13;
&#13;
&#13;

请注意,使用UTC方法添加72小时意味着72小时,即使是夏令时边界。