#php #time
#php #время
Вопрос:
Мне нужно отобразить время, но оно должно начинаться с 00:00:00? У меня есть следующее, но оно использует текущее время.
print(date("H:i:s"));
Комментарии:
1. Можете ли вы немного рассказать о том, что вы пытаетесь сделать? Это может быть я, но я не понимаю, что вы пытаетесь сделать.
2. @Aron Не волнуйся — это не ты.
3. Я думаю, ему нужно «дельта» время, то есть PHP-эквивалент
Stopwatch
класса C #.4. Вы пытаетесь создать какой-то таймер?
5.
echo '00:00:00'
tada!
Ответ №1:
В качестве альтернативы mktime()
попробуйте более новый DateTime
класс, например
$dt = new DateTime;
$dt->setTime(0, 0);
echo $dt->format('H:i:s');
// Add one hour
$dt->add(new DateInterval('PT1H'));
echo $dt->format('H:i:s');
Обновить
Гибкость DateInterval
делает это очень хорошим кандидатом для таймера, например
// add 2 years, 1 day and 9 seconds
$dt->add(new DateInterval('P2Y1DT9S'));
Комментарии:
1. что означает P2Y1DT9S? можете объяснить это в форме разбивки? Я не могу найти объяснение в классе DateInterval
2. @Shiro P = период, 2Y = 2 года, 1D = 1 день, T = время, 9S = 9 секунд
3. Да, класс PHP DateTime (и связанные с ним классы, такие как DateInterval), в общем, действительно привлекательны и просты в использовании … и значительно проще и менее хакерски, чем «старый» способ обработки дат. Это отличный ответ на этот вопрос, но я также просто хочу сказать всем, кто читает это, что стоит потратить время, чтобы узнать, как их использовать, если вы ЧТО-ТО делаете с датами или временем.
Ответ №2:
Используйте mktime()
, если вы хотите начать с полуночи для текущей даты:
<?php
echo date('l jS of F Y h:i:s A',mktime(0,0,0));
?>
ВЫВОДИТ
Friday 14th of October 2011 12:00:00 AM
В mktime()
, вы передаете аргументы для hours, minutes, seconds, month, day, year
, поэтому установите hours, minutes, seconds
0
для get today at midnight
. (Обратите внимание, как указывает Фил, mktime()
аргументы ‘s являются необязательными, и вы можете не month, day, year
указывать, и по умолчанию будет использоваться текущая дата).
mktime()
Функция возвращает временную метку unix, представляющую количество секунд, прошедших с эпохи unix (1 января 1970 года). Вы можете отсчитывать от него в секундах или кратных секундам.
<?php
// $midnight = mktime(0,0,0,date('m'),date('d'),date('Y'));
// The above is equivalent to below
$midnight = mktime(0,0,0);
echo date('l jS of F Y h:i:s A',$midnight)."n";
echo date('l jS of F Y h:i:s A',$midnight 60)."n"; // One minute
echo date('l jS of F Y h:i:s A',$midnight (60*60))."n"; // One hour
?>
ВЫВОДИТ
Friday 14th of October 2011 12:00:00 AM
Friday 14th of October 2011 12:01:00 AM
Friday 14th of October 2011 01:00:00 AM
Комментарии:
1. Вы знаете, что вы можете опустить аргументы месяца, дня и года
mktime()
, если хотите использовать текущие значения2. Смотрите Ответ ladenedge. Вы просто оставляете их, передавая только три аргумента
3. Хорошо, я понимаю, что вы имеете в виду. Это имеет смысл.
Ответ №3:
date()
использует текущее время, когда вы не передаете явную временную метку. Смотрите необязательный аргумент в date
документации.
Если вы хотите явно отформатировать полночь, используйте:
date("H:i:s", mktime(0, 0, 0));
Ответ №4:
попробуйте использовать этот синтаксис:
print(date("H:i:s", 0));
или
print(date("H:i:s", 10)); // 10 seconds
Комментарии:
1. Будьте осторожны, так как
date()
чувствительны к часовому поясу. 0 или 10 секунд после полуночи 1 января 1970 года будут выглядеть совершенно по-разному в зависимости от вашего часового пояса2. Значение 0 будет меняться в зависимости от вашей версии PHP. Начиная с версии 5.1.0, 0 означает Пт, 13 декабря 1901 года, 20:45:54.
3. да, для времени UNIX он должен использовать mktime(…)
4. @ladenedge Нет, 0 по-прежнему соответствует полуночи, 1 января 1970 года по Гринвичу. Временные метки Unix являются целыми числами со знаком
5. Хорошо, заткни мне рот. Хороший улов, Фил.