如何检查输入日期是不是等于今天的日期?
Posted
技术标签:
【中文标题】如何检查输入日期是不是等于今天的日期?【英文标题】:How to check if input date is equal to today's date?如何检查输入日期是否等于今天的日期? 【发布时间】:2012-01-03 04:09:03 【问题描述】:我有一个 id 为“date_trans”的表单输入。该日期输入(经过服务器端验证)的格式可以是以下任何一种:
dd/mm/yyyy dd-mm-yyyy yyyy-mm-dd yyyy/mm/dd但是,在发布表单之前,我想检查 date_trans 字段的日期是否等于今天的日期。如果日期是客户端的日期(即它使用 js),那没关系,因为我也在服务器上运行了双重检查。
我完全不知道如何在 jQuery 或普通的旧 javascript 中进行日期比较。如果有帮助,我正在使用jquery datepicker
【问题讨论】:
顺便说一句,这些是您接受的一些愚蠢的日期格式。如果您对接受它们的决定有任何控制权,我建议您重新考虑它们的有用性/必要性。 他们有什么可笑的?我们在多个国家/地区开展业务,它们是公认的格式。我想你认为每个人都使用(荒谬的)美国格式? 天哪,不!美国格式令人震惊,但它不在您的列表中,但很容易被您的第一个案例混淆。如果您确定所有四个都是必需的,请务必使用它们。在我看来,您似乎选择了同时任意放纵和任意限制。 耸耸肩 美国格式工作得很好,并且已经工作了很多年。 【参考方案1】:纯 JS 中的简单日期比较就足够了:
// Create date from input value
var inputDate = new Date("11/21/2011");
// Get today's date
var todaysDate = new Date();
// call setHours to take the time out of the comparison
if(inputDate.setHours(0,0,0,0) == todaysDate.setHours(0,0,0,0))
// Date equals today's date
这里是a working JSFiddle。
【讨论】:
+1 用于使用setHours
的小时/分钟/秒/毫秒版本。
日期格式为“21-11-2011”或“21/11/2011”时不起作用
如果你想重复使用,不要忘记克隆输入的日期。 ==> 使用 newDate(date.valueOf()).setHours(0,0,0,0)
这当然等于if( (new Date(inputDate)).setHours(0,0,0,0) === (new Date()).setHours(0,0,0,0) )
因为我是 utc-8,所以当时间晚于下午 3 点时,这并不总是适用于我。 schellmax (***.com/a/26257591/2886089) 的答案效果更好。【参考方案2】:
为了完整起见,取自this solution:
你可以使用 toDateString:
var today = new Date();
var isToday = (today.toDateString() == otherDate.toDateString());
没有库依赖,并且看起来比之前答案中显示的“setHours()”方法更简洁,恕我直言
【讨论】:
这很棘手。在角度手表的情况下,我有 newDates[i] =1476252000000 和 oldDates[i] === 1476252000000。但是,它们并不相等。 Date.parse(newDates[1]) === Date.parse(oldDates[1]) 返回 false。 @Winnemucca 为我返回给定值的true
。您不必使用Date.parse
进行平等检查
@Winnemucca,使用 === 并不总是更好。
当您处理大量比较时,整数比较优于字符串。 This source 是针对 c++ 的,但是没有区别,因为它是机器级别的【参考方案3】:
尝试使用 moment.js
moment('dd/mm/yyyy').isSame(Date.now(), 'day');
您可以根据需要将“日”字符串替换为“年、月、分”。
【讨论】:
【参考方案4】:function sameDay( d1, d2 )
return d1.getUTCFullYear() == d2.getUTCFullYear() &&
d1.getUTCMonth() == d2.getUTCMonth() &&
d1.getUTCDate() == d2.getUTCDate();
if (sameDay( new Date(userString), new Date))
// ...
使用 UTC* 方法可确保在不同时区匹配同一全球日期的两个等效日期相同。 (如果您直接解析两个日期,则没有必要,但要考虑一下。)
【讨论】:
你应该提到,这实际上是月份索引而不是月份编号本身,因此需要添加1 在大多数情况下,首先检查相同的天数,然后是月份,然后是年份会不会更快? @xcy7e웃 取决于输入数据,但可能。但是,如果您可以创建一个测试用例,这实际上会产生任何可衡量的差异,我会印象深刻。 是的,你是对的,不会有太多可衡量的差异 - 但我说的是哲学;)【参考方案5】:只需在您的 javaScript 中使用以下代码:
if(new Date(hireDate).getTime() > new Date().getTime())
//Date greater than today's date
根据您的要求更改条件。这是一个比较链接compare in java script
【讨论】:
【参考方案6】:以下解决方案比较时间戳整数除以小时、分钟、秒、毫秒的值。
var reducedToDay = function(date)return ~~(date.getTime()/(1000*60*60*24));;
return reducedToDay(date1) == reducedToDay(date2)
波浪号截断除法结果(见this article about integer division)
【讨论】:
【参考方案7】:Date.js 是一个方便的库,用于操作和格式化日期。它可以在这种情况下提供帮助。
【讨论】:
是否必须使用 Date.js 仅用于日期比较? 不,你没有。但如果日期格式不同,Date.js 可以方便地对其进行规范化。【参考方案8】:在typescript
中比较日期的最佳方式和推荐方式是:
var today = new Date().getTime();
var reqDateVar = new Date(somedate).getTime();
if(today === reqDateVar)
// NOW
else
// Some other time
【讨论】:
【参考方案9】:试试这个
// method to check date is less than today date
isLessDate(schedule_date : any)
var _schedule_date = new Date(schedule_date);
var date = new Date();
var transformDate = this.datePipe.transform(date, 'yyyy-MM-dd');
var _today_date = new Date(''+transformDate);
if(_schedule_date < _today_date)
return 'small'
else if(_schedule_date > _today_date)
return 'big'
else
return 'same'
【讨论】:
【参考方案10】:TodayDate = new Date();
if (TodayDate > AnotherDate) else
【讨论】:
如果日期中也有时间,这将不起作用。 它经常这样做。【参考方案11】:有一个更简单的解决方案
if (inputDate.getDate() === todayDate.getDate())
// do stuff
这样你就不会失去inputDate
的时间(如果有的话)
【讨论】:
这个解决方案有很多问题.getDate()
只返回月份的数字日期。因此,如果你使用它,如果一个日期是 1962 年 8 月 10 日,另一个日期是 2025 年 10 月 10 日,它将返回 true。以上是关于如何检查输入日期是不是等于今天的日期?的主要内容,如果未能解决你的问题,请参考以下文章