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

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

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

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

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

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

Да, есть способ сделать это в 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) 

Время UNIX проще для такого рода задач.

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

 <?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