我想根据时间将数据数组拆分为三个数组 - 过去,今天,之后。
对于今天的阵列,只有具有今天日期和时间大于今天的时间的数据应该存在。
这是我的代码。它没有错误(据我所知)。我得到了理想的结果,但我想知道这段代码是否可以更优化。
$current_date = date('Y-m-d');
$current_time = date('H:i:s');
foreach($data as $key => $value) {
if(date('Y-m-d', $value->meeting_scheduled_at) > $current_date) {
$calendar_data['later'][] = $value;
} elseif (date('Y-m-d', $value->meeting_scheduled_at) < $current_date
|| ( (date('Y-m-d', $value->meeting_scheduled_at) == $current_date)
&& (date('H:i:s', $value->meeting_scheduled_at) < $current_time) )
) {
$calendar_data['past'][] = $value;
} else {
$calendar_data['now'][] = $value;
}
}
$value->meeting_scheduled_at
是时间戳
因此,如果会议安排在今天的会议日期,时间是晚上6点。它将进入今天阵列直到下午6点。下午6点后,它进入过去的阵列。简而言之,除非并且直到第二天,否则在后面的数组中不应该存在任何内容。
答案 0 :(得分:2)
date('Y-m-d', $value->meeting_scheduled_at)
只应计算一次。
答案 1 :(得分:2)
我喜欢将DateTime
类用于此类事情。它考虑了夏令时等,可以很容易地进行比较。
$now = new DateTime();
$tomorrow = new DateTime();
$meetingDate = new DateTime();
$tomorrow->add(new DateInterval('P1D'))->setTime(0,0,0);
foreach ($data as $key => $value) {
$meetingDate->setTimestamp($value->meeting_scheduled_at);
// if $value->meeting_scheduled_at format YYYY-MM-DD then
// we'd create the $meetingDate object here like this
// $meetingDate = new DateTime($value->meeting_scheduled_at);
if ($meetingDate < $now) {
$calendar_data['past'][] = $value;
} else if ($meetingDate >= $tomorrow) {
$calendar_data['later'][] = $value;
} else {
$calendar_data['now'][] = $value;
}
}
答案 2 :(得分:1)
让它更容易
$now = time();
// Midnight due to discussion with Kevin Nagurski in comments :)
$tommorow = strtotime('tomorrow');
foreach($data as $key => $value)
if ($value->meeting_scheduled_at) < $now) $calendar_data['past'][] = $value;
elseif ($value->meeting_scheduled_at) >= $tommorow) $calendar_data['later'][] = $value;
else $calendar_data['now'][] = $value;
答案 3 :(得分:1)
您可以使用时间戳。
$now = time();
$today_limt = strtotime("today 6 PM");
foreach($data as $key => $value) {
$meeting_time = strtotime($value->meeting_scheduled_at);
if($meeting_time > $today_limit) {
$calendar_data['later'][] = $value;
} elseif($meeting_time < $now) {
$calendar_data['past'][] = $value;
} else {
$calendar_data['now'][] = $value;
}
}