检查输入的日期时间是否距离现在超过 72 小时?
Check weather the entered datetime is more than 72 hours from now?
我有一个日期时间选择器,它以下列格式为 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
和 textbox
中的 datetime
。也许通过 jQuery。有没有更短的方法?
Use moment.js
以下是如何在您的代码中实现它,
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");
}
};
现在 diffInHours
现在和所选日期时间之间会有小时差。
你也不用解析了
以字符串“2017 年 5 月 1 日 - 03:45 下午”开头,可以生成一个日期,减去 72 小时,然后看它是否大于现在。
有几个很好的库用于解析和格式化日期(例如 moment.js and fecha.js 就可以),或者您可以使用自定义函数。
// 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()));
请注意,使用 UTC 方法添加 72 小时意味着经过了 72 小时,即使超过了夏令时界限。
这可能会有帮助
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
}
我有一个日期时间选择器,它以下列格式为 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
和 textbox
中的 datetime
。也许通过 jQuery。有没有更短的方法?
Use
moment.js
以下是如何在您的代码中实现它,
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");
}
};
现在 diffInHours
现在和所选日期时间之间会有小时差。
你也不用解析了
以字符串“2017 年 5 月 1 日 - 03:45 下午”开头,可以生成一个日期,减去 72 小时,然后看它是否大于现在。
有几个很好的库用于解析和格式化日期(例如 moment.js and fecha.js 就可以),或者您可以使用自定义函数。
// 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()));
请注意,使用 UTC 方法添加 72 小时意味着经过了 72 小时,即使超过了夏令时界限。
这可能会有帮助
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
}