无法比较两个日期

时间:2016-05-31 07:31:39

标签: php arrays

我有array并使用foreach循环我正在尝试检查dinner_date是否与之前的索引dinner_date匹配,如果他们不匹配我正在分配{ {1}}变量名为yes这就是输出看起来行

$newDate

这是我的array:4 [▼ 0 => array:3 [▼ "request_id" => "48" "dinner_date" => "2016-05-16T10:00:00" "new_date" => "no" ] 1 => array:3 [▼ "request_id" => "51" "dinner_date" => "2016-05-16T10:00:00" "new_date" => "no" ] 2 => array:3 [▼ "request_id" => "50" "dinner_date" => "2016-05-27T10:00:00" "new_date" => "no" ] 3 => array:3 [▼ "request_id" => "52" "dinner_date" => "2016-05-27T10:00:00" "new_date" => "no" ] ] 循环

foreach

正如您在数组输出的索引$dinnerDetails = array(); $lastDinnerDate = ''; $newDate = ''; foreach ($invitations as $invitation) { $lastDinnerDate = $invitation['dinner_date']; if ($invitation['dinner_date'] > $lastDinnerDate) { $newDate = 'yes'; } else { $newDate = 'no'; } $dinnerDetails[] = array( 'request_id' => $invitation['request_id'], 'dinner_date' => $invitation['dinner_date'], 'new_dinner' => $newDate ); } 中看到的那样2它应该是new_date => no,因为此索引的yes与{{1}不同上面的索引。

我在这里做错了吗?

3 个答案:

答案 0 :(得分:1)

将其更改为:

$lastDinnerDate = '';
foreach ($invitations as $invitation) {
    $lastDinnerDate = $invitation['dinner_date'];
    $newDate = 'no';
    if ($lastDinnerDate != "") {
        if ($invitation['dinner_date'] > $lastDinnerDate) {
            $newDate = 'yes';
        } else {
            $newDate = 'no';
        }
    }
    $lastDinnerDate = $invitation['dinner_date'];
    $dinnerDetails[] = array(
        'request_id' => $invitation['request_id'],
        'dinner_date' => $invitation['dinner_date'],
        'new_dinner' => $newDate
    );
}

答案 1 :(得分:1)

评论:在你的情况下,它们都是相同的,你需要在条件之后存储$lastDinnerDate = $invitation['dinner_date'];

在if条件中再添加一个条件$lastDinnerDate != "",并在条件之后指定``。

  

对于比较,您需要将日期时间转换为时间戳。

foreach ($invitations as $invitation) {

    if (strtotime($invitation['dinner_date']) > $lastDinnerDate && $lastDinnerDate != "") {
        $newDate = 'yes';

    } else {
        $newDate = 'no';
    }
    $lastDinnerDate = strtotime($invitation['dinner_date']);

    $dinnerDetails[] = array(
        'request_id' => $invitation['request_id'],
        'dinner_date' => $invitation['dinner_date'],
        'new_dinner' => $newDate
    );
}

答案 2 :(得分:0)

这里的主要问题是你在每个循环中存储相同的值,因此每次两个日期都是相同的,因此执行永远不会到达“是”分支。

此外,您正在尝试为两个字符串应用算术比较运算符,这将提供虚假结果:

$invitation['dinner_date'] > $lastDinnerDate

您需要做的就是使用 strtotime() 。它基本上将任何日期格式解析为时间戳,您可以定期进行比较:

strtotime($invitation['dinner_date']) > strtotime($lastDinnerDate)

它可以解析各种日期字符串,有关详细信息,请访问官方手册中的 datetime.formats