如何检查输入日期是不是等于今天的日期?

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。

以上是关于如何检查输入日期是不是等于今天的日期?的主要内容,如果未能解决你的问题,请参考以下文章

检查给定日期是不是存在于从日期到今天之间

如何检查今天是不是在 Twig 的两个日期之间?

日期时间等于或大于 MySQL 中的今天

SQL 其中 datetime 列等于今天的日期?

MySQL选择日期等于今天的日期时间字段

如何更新数据库等于日期等于5天前的当前日期