#php #time
#php #время
Вопрос:
Каков наилучший способ преобразовать 24-часовое время в секунды, чтобы его можно было использовать для сравнения с инструкцией if..
function HourMinuteToDecimal($hour_minute) {
$t = explode(':', $hour_minute);
return $t[0] * 60 $t[1];
}
echo HourMinuteToDecimal("23:30");
return 1410
Если вы попытаетесь преобразовать время полуночи (00:00) в секунды, это не сработает. Каково решение этой проблемы?
00:00, 00:30, 01:00, 01:30, и т.д.
if (HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30")) { .. }
Это не сработает.
Комментарии:
1. когда вы говорите, что преобразование ’00:00′ не сработает, что вы имеете в виду? Это приведет к нулевым секундам, но это правильно, не так ли? Если вы хотите, чтобы 00:00 означало 24 часа, а не ноль часов, тогда вам нужно сделать это особым случаем.
2. Это правда, когда вы говорите «особый случай» … например, что? У меня есть код примерно такого типа: if (часовая минутно-десятичная («01:30») > Часовая минутно-десятичная(«23:30»)) { .. } Это не сработало бы так, как ожидалось.. Как решить эту проблему?
3. @user622378: Чтобы решить «проблему», вы должны указать, в чем проблема. Вы сказали «это не сработает» и «это будет работать не так, как ожидалось», но не говорите, почему . Я не вижу здесь проблемы.
4. Томалак Герет’кал, я не знаю, как объяснить проблему. Я хочу, чтобы 00: 00 означало 24 часа. Необходимо обновить функцию HourMinuteToDecimal, я думаю, чтобы справиться с этим, но я не уверен, как это сделать. Функция HourMinuteToDecimal работает только без учета 12 часов.
Ответ №1:
PHP5.3
$formattedTime = '00:01:38';
$seconds = strtotime('1970-01-01 ' . $formattedTime . 'GMT')
Ответ №2:
Для преобразования функции:
function hoursToSecods ($hour) { // $hour must be a string type: "HH:mm:ss"
$parse = array();
if (!preg_match ('#^(?<hours>[d]{2}):(?<mins>[d]{2}):(?<secs>[d]{2})$#',$hour,$parse)) {
// Throw error, exception, etc
throw new RuntimeException ("Hour Format not valid");
}
return (int) $parse['hours'] * 3600 (int) $parse['mins'] * 60 (int) $parse['secs'];
}
Пишу на лету, не проверено:-P
таким образом, вы можете использовать strtotime для преобразования формата даты в временную метку unix и сравнения с использованием стандартных операторов (== < > >= <= !=, и т.д.) например:
$t1 = "23:40:12";
$t2 = "17:53:04";
$h1 = strtotime("0000-00-00 $t1");
$h2 = strtotime("0000-00-00 $t2");
$h1 == $h2; // if are equals
$h1 > $h2; // if h1 is mayor at h2
$h1-$h2; // dieference in seconds, etc.
и т.д..
Комментарии:
1. $t1 = hoursToSecods — Количество секунд(«00:00:00»); не сработает. 00:00:00 — это, возможно, 12 ночи
2. да, но если вы прочитаете вопрос; «Каков наилучший способ преобразовать 24-часовое время в секунды, чтобы его можно было использовать для сравнения, если оператор ..», 00:00:00 — это 0 секунд прошедшего дня.
Ответ №3:
Кажется, вы задаете противоречивые вопросы.
- Вы хотите преобразовать время в
HH:MM
в секунды. - Но затем вы хотите «сравнить» результат за разное время, как если бы к ним были прикреплены даты.
Если вы хотите, чтобы HourMinuteToDecimal("01:30") > HourMinuteToDecimal("23:30")
значение было истинным без даты, тогда, ну, любое сравнение вернет результат true
.
Если вы хотите сделать это правильно, укажите дату ( YYYY-MM-DD HH:MM:SS
) и используйте strtotime
в PHP, чтобы получить количество секунд, прошедших с эпохи UNIX.
Кроме того, ваша функция возвращает минуты, а не секунды.
Комментарии:
1. Как я могу включить ГГГГ-ММ-ДД? Я уже получил более 8000 строк времени без даты. Значит, 23:30 будет 2011-05-18 23:30:30, а 00:00 — 2011-05-19 00:00:00?
2. @user622378: Как ваш код должен угадывать, с какого дня отсчитывается время? Или вы намерены использовать «сейчас» в качестве точки поворота?
3. Пример: $nowTime = часминутно-десятичный (дата(‘H: i’)); $OpenTime = часминутно-десятичный ($data [‘Result’][$key][‘opentime’]); если ($nowTime > $OpenTime) { .. } Это работает, но не тогда, когда время превышает 00:00
4. @user622378: Это не ответ на мой вопрос.
5. @LightnessRacesinOrbit, как это будет работать, если дата не имеет значения? Или если дата всегда должна быть текущей датой? Например, моя компания открывается каждый день в 8:00:00 и закрывается в 20:00:00. Если время до 8:00:00 или после 20:00:00, я хочу скрыть определенную ссылку (ссылку на текстовый чат в реальном времени). Я думаю, мы можем попробовать сохранить текущую дату из date() в переменной и объединить ее со временем, чтобы получить что-то в
YYYY-MM-DD HH:MM:SS
формате….
Ответ №4:
Вы можете сравнивать объекты типа time
с помощью стандартных <
операторов >
, ==
,,,. Используйте strtotime
для преобразования строки во время, затем сравните.
Комментарии:
1. Не уверен, что вы подразумеваете под объектами типа time. Время сохраняется в базе данных с использованием типа поля ‘time’. 17:00:00, 178:00:00, 00:00:00, 01:00:00, и т. д
2. Когда вы загружаете значения времени из базы данных, они будут строками. Используйте
strtotime
для преобразования этих строк во времена.3. Я не думаю, что мы должны вводить в него временные метки UNIX. Мы не имеем дело с датами.