javascript - 在 Javascript 中比较完整日历中的日期
问题描述
我正在尝试在 Javascript 中检查日历(fullcalendar)的日期,本质上我只是希望它不能选择过去的日期:
dateClick: function(info) {
var today = Date.now();
var check = new Date(info.dateStr)
if(check < today)
{
alert('You cannot request dates in the past');
return;
}
else
{
alert('this is the future');
}
},
我得到了一些奇怪的结果,它似乎可以计算过去的罚款,但也可以将当天计算为过去和明天。后天计算为未来。不知道发生了什么。
info.dateStr 给出格式 YYYY-mm-dd。
解决方案
您应该强制使用+Date
或使用数字.getTime()
来确保您正在比较数字时间戳值。您可能没问题,因为您使用的是返回时间戳的 Date.now()。
由于诸如 OP 中的问题,强烈建议不要使用 Date 的字符串解析进行解析:
https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
通过手动解析字符串来使用 Date(yyyy, mm, dd, ...) 构造函数(使用本地时区),而不是内置日期字符串解析(如果未提供时区,则使用 UTC)。
通过将 24*60*60*1000 添加到 getTime() 值来使用一天结束,因为这很可能是您所期望的(与今天过去相同的日期并不是大多数人通常想要的)。
例如:检查日期为 05-29-2020,您实际上想要05-29-2020 23:59:999之前的任何内容
即:check= 05-29-2020 23:59:999 < today=05-29-2020 22:00:000 === false(不是过去)
或者换句话说,实际意图是:
05-29- 2020 => 从 05-29-2020 00:00 到 05-29-2020 23:59 => 实际上与检查 05-30-2020 00:00 - 1 毫秒相同
dateClick = function(info) {
var today = Date.now()
var check = (([y,m,d])=>new Date(+y,+m-1,+d))(info.dateStr.split(/\D/)).getTime()
+ 24*60*60*1000-1 // add full day so same date as today is not past
console.log(today,check)
if(check < today)
{
alert('You cannot request dates in the past');
return;
}
else
{
alert('this is the future');
}
}
dateClick({dateStr:'2020-05-28'})
dateClick({dateStr:'2020-05-29'})
dateClick({dateStr:'2020-05-30'})
dateClick({dateStr:'2020-05-31'})
推荐阅读
- python - Python 3.7 变量链式方法调用
- azure - How can I debug oauth2_proxy when connecting to Azure B2C?
- java - 如何从java中的拆分字符串打印值的名称?
- javascript - 如何将此时间戳转换为 javascript 中更易读的形式?
- c# - C# MongoDB 连接和查找
- c - 编写一个函数来计算一个人在闰年出生时的年龄(fe 29.2.2000)
- java - Java 文件操作中的“找不到符号”
- php - Telegram Bot 问问题没有像 BotFath 这样的按钮
- python - 具有多处理功能的python中IPC的优雅解决方案
- python-unittest - Unittest:如何获取已传递给补丁装饰器的值?