Более 24 часов на свидание?

Я работаю над проектом (фид 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, поскольку это будет означать (опять же, только для меня), что эти поездки начинаются до полуночи, но я не думаю, что это правильный путь.

1

Решение

Хорошо видя, так как он отображается только на странице, вы можете

во-первых, получить свидание откуда угодно
Скажем $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;

Несмотря на то, что дал вам ответ. Это глупо делать, но это не твой выбор, так что вот и все 🙂

3

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

То, как вы отображаете что-то, не обязательно должно быть таким же, как вы что-то храните.

Я не знаю, как вы рассчитываете время, но при условии, что у вас есть дата и время начала, и некоторый интервал, вы можете рассчитать время окончания следующим образом:

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 часов, а также дней в месяце и т. Д. Вам решать, как вы справляетесь с этими случаями. Удачи!

1

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