Используя Carbon, чтобы узнать, попадает ли время в два пункта или нет

Я использую Laravel. Я только что встретил Carbon, который уже был в папке поставщиков. Я сделал быстрый поиск и обнаружил, что это отличное расширение от PHP Date time.

Где-то в моем приложении мне нужна была логика, которая будет проверять, падает ли заданное время между двумя точками времени. Допустим, я хочу проверить, падает ли 10:00 под временем 9:55 и 10:05. Конечно, это падает, но как я должен использовать эту логику с помощью Carbon.

По умолчанию Carbon::now() вернет дату и время в формате 2014-12-02 14:37:18. Я думал, могу ли я извлечь часть времени только i.e 14:37:18, тогда я могу сравнить два раза, чтобы узнать, попадает ли время под тестированием в два момента времени или нет.

Если я непосредственно проверю два объекта Carbon, он попытается также проверить год. Но мне нужна только часть времени.

И по сути, я даже не уверен, что времена (h: m: s) можно напрямую сравнить или не с помощью углерода.

Ответ 1

Да, есть способ сделать это в Carbon, так как просто взгляните на документацию здесь.

Чтобы определить, находится ли текущий экземпляр между двумя другими экземплярами, вы можете использовать метод aptly named между(). Третий параметр указывает, должно ли быть выполнено сравнение. Значение по умолчанию - true, которое определяет, находится ли оно между или равным границам.

$first = Carbon::create(2012, 9, 5, 1);
$second = Carbon::create(2012, 9, 5, 5);
var_dump(Carbon::create(2012, 9, 5, 3)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second));          // bool(true)
var_dump(Carbon::create(2012, 9, 5, 5)->between($first, $second, false));   // bool(false)

Ответ 2

Время UNIX для этой задачи проще.

Таким образом, вы можете использовать strtotime, чтобы преобразовать представление hipster в представление шерифа и сравнить, как настоящий мужчина. Поскольку вы хотите сравнить часы, вы можете взломать это, используя относительное время.

<?php
$now = time();
$startTime = strtotime( "12:10:24", $now );
$endTime = strtotime( "14:24:45", $now );
$point = strtotime("12:25:40", $now );
if( $point >= $startTime && $point <= $endTime )
{
  echo "Inside\n";
} else {
  echo "Outside\n";
}
?>

Вывод:

$ php test.php 2> /dev/null
Inside