Я работаю над проектом (фид Google Transit), в котором мне необходимо указать время для каждой остановки на автобусном маршруте в следующем общем формате: 21:00:00 и т. Д.
Проблема в том, что, если для данной поездки время продолжается после полуночи, они требуют, чтобы он продолжал отсчет часов соответственно. Они объясняют вполне определенно, что 02:00:00 должно стать 26:00:00, а 03:45:00 должно стать 27:45:00 и т. Д.
Я озадачен тем, как отображать такие функции с помощью функций date () или strtotime ().
Единственное, о чем я могу думать в моей конкретной ситуации, — это использовать функцию match и заменять любые строки в моих выходных данных между 00:00:00 и 04:00:00, поскольку это будет означать (опять же, только для меня), что эти поездки начинаются до полуночи, но я не думаю, что это правильный путь.
Хорошо видя, так как он отображается только на странице, вы можете
во-первых, получить свидание откуда угодно
Скажем $date = 00:00:00
$exploded_date = explode(":", $date);
Это занимает $date
и помещает его в массив так
$exploded_date[0] is hh
$exploded_date[1] is mm
$exploded_date[2] is ss
Тогда вы можете использовать ltrim (), чтобы удалить ведущие 0 с 00 на 04 $exploded_date[0]
— Это делает его сопоставимым в утверждении if, которое я сделаю после
if($exploded_date[0] <= 4) {
$exploded_date[0] = ltrim($exploded_date[0], "0");
$exploded_date[0] = $exploded_date[0]+24;
}
Затем вы можете объединить массив обратно в одну строку
$date = implode(":", $exploded_date);
// if the hour is 00 to 04 it will come out as 24 to 28
// e.g. 24:35:30
echo $date;
Несмотря на то, что дал вам ответ. Это глупо делать, но это не твой выбор, так что вот и все 🙂
То, как вы отображаете что-то, не обязательно должно быть таким же, как вы что-то храните.
Я не знаю, как вы рассчитываете время, но при условии, что у вас есть дата и время начала, и некоторый интервал, вы можете рассчитать время окончания следующим образом:
date_default_timezone_set('Europe/London');
$start_datetime = new DateTime('2014-11-11T21:00:00');
$next_stop = new DateTime('2014-11-12T02:00:00');
echo $start_datetime->format('Y-m-d H:i'); // 2014-11-11 21:00
echo $next_stop->format('Y-m-d H:i'); // 2014-11-12 02:00
$interval = $start_datetime->diff($next_stop);
// display next stop: 2014-11-11 26:00
echo ($start_datetime->format('Y') + $interval->y) .'-'
. ($start_datetime->format('m') + $interval->m) .'-'
. ($start_datetime->format('d') + $interval->d) .' '
. ($start_datetime->format('H') + $interval->h) .':'
. ($start_datetime->format('i') + $interval->i);
Что я делаю: создаю дату начала (& время) и дата и время следующей остановки. С DateTime::diff()
Функция Я вычисляю разницу, а затем, только для отображения (!), я добавляю каждый год, месяц, день, час и минуты к дате, году, месяцу и т. д. следующей остановки.
Таким образом, вы все еще можете хранить свои даты и время так, чтобы их понимал каждый человек и компьютерная система (потому что давайте будем честными; представлять время как 27:45 вечера довольно смешно …)
Я не знаю, хотите ли вы, чтобы часы складывались и переносились в течение 24 часов, а также дней в месяце и т. Д. Вам решать, как вы справляетесь с этими случаями. Удачи!