Преобразование времени в секунды

#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. Мы не имеем дело с датами.