【问题标题】:Compare difference between two dates PHP比较两个日期之间的差异 PHP
【发布时间】:2017-07-27 16:36:00
【问题描述】:

我正在尝试比较日期以找出它们之间的时间,我知道该怎么做,date_diff(),但我想比较日期之间的时间以及它是否大于 7 天做某事,如果不做其他事情。我认为这听起来很容易,而且我知道这样做可能有相当简单的解决方案,但我只是不喜欢日期和比较。这是我目前得到的一个 sn-p,因为它只是 switch 语句的一种情况,所以其余的基本相同。

$array = array();
$today = date("Y-m-d"); // get today's date

foreach($arrayOfObjs as $obj){
    if ($obj->get("renewalDate") >= $today){
        array_push($array, $obj->get("renewalDate"));
    }else{
        switch($obj->get("recurrencePeriod")){
            case 1:
       /*
       * All cases follow same structure
       * Build the date in format Y-m-d from renewalDate out of the obj.
       * Loop through the date while it's less than today.
       * After date is greater than today return date add to array
       */

       $date = DateTime::createFromFormat("Y-m-d", $obj->get('renewalDate'));
       while($date <= $today){
          $date->add(new DateInterval('P7D'));
        }
        $diff = date_diff($today, $date);
        if($diff->format('%a') <= 7){
          $obj->renewalDate($date);
          array_push($array, $obj);
        }
        break;

基本上,我的数据库存储日期,这些日期可以通过,但它可能是一个重复发生的事件。为了计算下一次该事件发生的时间,我检查数据库中的数据是否早于今天的日期,如果是,那么我继续添加增量金额(在这种情况下,7 表示每周重复发生的事件)并再次比较日期。在增加的日期经过今天的日期后,我想知道它是否在 7 天内,如果是,则将其添加到数组中以返回。我知道...因为我要添加 7 并且它是在 7 天内,第一个重复发生的事件将始终在 7 天内,但对于每月事件或更大的事件而言并非如此。

所有案例都已损坏,因此为简单起见,我仅包含此案例。我可以让 date_Diff 返回 7 或 12 或任何数字,但我如何检查该数字是否在我想要的 7 天内?

谢谢,如果需要澄清任何误解,我会提供更多信息。

【问题讨论】:

  • 老实说,这没有多大意义。您是否真的要查看日期是否在 7 天范围内?
  • 是的,基本上我将使用带有数字的小通知来显示有多少即将发生的事件正在接近。我们希望显示下周内的事件。
  • 我猜你说的很有道理。我可以将 7 天添加到我的 $today 变量,然后将其与 $date 变量进行比较。我想那会奏效。
  • 是的,那行得通。如果您的事件存储在数据库中,您只需选择日期在您的时间范围内的事件。

标签: php date compare


【解决方案1】:

我不完全确定您要做什么,但是如果您只是向前和向后预测日期并且想知道它们是否是 7 天或更长时间,那么以下情况如何:

$today = date("Y-m-d");
$todaytime = strtotime($today);

$testdate = "2017-06-31";
$testtime = strtotime($testdate);

$back7days = strtotime("-7 days",$todaytime);
if($testtime < $back7days)
    echo "X"; // do somthing if testdate was more than 7 days ago


$fwd7days = strtotime("+7 days", $todaytime);
if($testtime > $fwd7days)
    echo "Y"; // do somthing if testdate is more than 7 days in future  

只需确保您使用小于或小于等于比较器等来处理您需要的边界条件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多