【问题标题】:check a date between two dates - PHP检查两个日期之间的日期 - PHP
【发布时间】:2017-03-05 10:46:13
【问题描述】:

我想检查存储在我的数据库中的某个日期,如果该日期在本财政年度内,则打印 valid 如果不是,则打印 invalid

这是我的 php 代码:

$init_date= date("2016/07/01");
$end_date= date("2017/06/30");
$i_date = strtotime($init_date);
$e_date = strtotime($end_date);
$date_db= strtotime($date);// this $date is retrieved from my DB
if ($e_date > $date_db && $i_date < $date_db) 
     { echo "valid";}
else { echo "invalid";}

但问题是我不想手动设置开始和结束日期,有没有办法让它动态化?因为它每年都会更新

【问题讨论】:

  • "有没有办法让它动态化?" - 是的,请告诉我们,日期生成的规则是什么。
  • 我不明白是否所有日期都是日期格式而不是为什么strtotime
  • @user4035 抱歉,我没有收到您的问题,您所说的日期生成是什么意思?
  • @Smit 我是根据这个例子做的link,我知道这样更容易,但如果有更好的方法请告诉我
  • @Rawabi.a 你说:“我不想手动设置开始和结束日期” - 所以,你想要一台计算机来生成这些日期。它们应该如何生成?

标签: php date compare


【解决方案1】:

这样你的脚本会更动态

// the below snippet checks the date retrieved from database
// against fiscal periods between years 2000 and 2050 and return the 
// valid dates
$endYear=2000;
while($endYear<=2050) {
$end = $endYear.'/06/30';
$endDate = DateTime::createFromFormat('Y/m/d', $end);
$initDate = DateTime::createFromFormat('Y/m/d', $end);
$initDate = $initDate->sub(new DateInterval('P1Y'))->add(new DateInterval('P1D'));
$ddb = '2016-09-27';
$dateFrodDB = DateTime::createFromFormat('Y-m-d', $ddb);
if ($dateFrodDB>=$initDate && $dateFrodDB<=$endDate) 
     { echo "valid\n";
         echo "\tStartDate->\"".$initDate->format("Y-m-d")."\"\n";
         echo "\tEndDate->\"".$endDate->format("Y-m-d")."\"\n";
         echo "\tDateFromDatabase->\"".$dateFrodDB->format("Y-m-d")."\"\n";
     }
$endYear++;
}

/* output
   valid
        StartDate->"2016-07-01"
        EndDate->"2017-06-30"
        DateFromDatabase->"2016-09-27"
*/

PHP Sandbox上查看这个

【讨论】:

  • 非常感谢,我只是想问一下$endYear++ 每年将如何增加?或者它是如何工作的?
  • @Rawabi.a $endYEarwhile 循环中,这意味着如果您只想更改这些数字,它将检查从 2000 年到 2050 年 50 年的所有日期
【解决方案2】:

试试这个,

<?php
$start_date = date('Y-m-d', strtotime(str_replace("/", "-", $initdate)));
$end_date   = date('Y-m-d', strtotime(str_replace("/", "-", $end_date)));
$new_date   = date('Y-m-d', strtotime(str_replace("/", "-", $date)));
 if (($start_date < $new_date && $new_date < $end_date) || ($end_date < $new_date && $new_date < $start_date)) {
    echo "valid";
} else {
    echo 'invalid';
}

这里正在工作link

【讨论】:

  • 它显示 invalid,即使检索到的日期在这两个日期之间
  • 它工作了,谢谢,但在这种情况下,你自己设置了开始和结束,所以它不再是动态的,对吧?
  • 好的,我知道了。等一下,我会准备好动态的
  • 我更新了条件,现在在这两种情况下都可以使用。意味着即使您的开始日期和结束日期会自行交换,上面的代码也可以工作。我也更新了链接
  • 在 PHP 中使用日期计算时最好使用日期时间对象。这样,与时间、区域等相关的所有内容都会为您处理。让生活更轻松
猜你喜欢
  • 2013-10-04
  • 1970-01-01
  • 2019-08-05
  • 1970-01-01
  • 1970-01-01
  • 2020-07-19
相关资源
最近更新 更多