timestamp — проверка php, если строка времени целый час, например & quot; 8: 00 am"

У меня есть ряд временных строк, таких как «8:00 утра», «8:15 утра», «8:30 утра». У меня также есть временные метки для этих времен в качестве ключей массивов, где как раз значения, так что массив будет выглядеть так:

Замечания: В этом примере временные метки являются фиктивными

array(
144441415=>"8:00am",
1444784744=>8:30am
...
.....
);

Я хотел бы знать, если час это целый час, например, «8:00 утра», «9:00 утра» являются целыми часами, но «8:45 утра» или «9:30 утра» не являются целыми часами. Я хотел бы отфильтровать целые часы из массива, как указано выше. Благодарю.

1

Решение

Вы могли бы сделать что-то вроде этого:

$times = array(
144441415=>"8:00am",
1444784744=>"8:30am",
1444784745=>"8:45am",
1444784746=>"9:00am",
1444784747=>"10:00am",

);

foreach ($times as $time) {
if (date("H:00:00", strtotime($time)) == date("H:i:00", strtotime($time))) {
echo '<br>Whole Hour: '.$time;
}
else {
echo '<br>Not Whole Hour: '. $time;
}
}
0

Другие решения

Спасибо, Руди, я смог получить целый час из числа секунд, спасибо за подсказку, поэтому я сделал что-то вроде этого:

//Loop through each hour of the day by getting both key and value
foreach( $hours_of_day $timestamp=>$time_string )
{
//If timestamp mod by number of seconds in hours is zero this means whole hour
if( ($timestamp%3600) == 0 )
{
echo "Whole hour = $timestring<br />";
}
}
0

Для тех, кто может столкнуться с этим вопросом, лучший способ добиться этого заключается в следующем:

define("BR", "<br />");
$data = array(
144441415=>"8:00am",
1444784744=>"8:30am");

$tmp_dto;
$tmp_mins;

foreach($data as $hour){
$tmp_dto = DateTime::createFromFormat("H:iA", $hour);
$tmp_mins = $tmp_dto->format("i");
if($tmp_mins == "00"){
echo "ROUND".BR;
}
else{
echo "NOT ROUND".BR;
}
}

Выходы

ROUND
NOT ROUND
0
По вопросам рекламы [email protected]