php разница между временем
Разница во времени в формате timestamp
Пытаюсь сделать таймер. Есть время окончания — 2015-05-13 17:00:00.
Нужно посчитать разницу между текущим временем и временем до окончания и запихнуть это всё в переменные:
чтоб в будущем эти переменные подставить в обратный таймер с JavaScript.
4 ответа 4
Буквальный ответ такой:
Но можно передать в JS просто метку времени, а не составляющие.
Нюанс в том, что Javascript работает с милисекундами, а PHP с секундами.
А уже в JS делайте какие-то вычисления.
Вопрос немного размыт (нужно ли полное количество секунд / минут / часов или округленное до минут / часов / дней), поэтому сложно на него ответить. Я буду опираться на то, что требуется полное количество часов и округленное количество минут и секунд.
UNIX Timestamp
Таким образом можно получить необходимые данные с минимальными затратами (математические операции крайне дешевы по сравнению с тем, о чем пойдет речь дальше).
DateInterval
Более верным решением задач с датами является работа с объектами класса DateTime и DateInterval. Эти два класса представляют собой дату и разницу дат соответственно. При простой работе с временной меткой возникает куча неразрешимых вопросов, например:
Из-за особенностей календаря появляется очень много нетривиальных моментов, где просто невзможно работать с разницей дат как с числом секунд. Поэтому в языках программирования вводятся сущности, аналогичные DateTime и DateInterval. В вышеприведенном случае работа с DateTime будет максимально проста:
Дальше пойдут небольшие пляски с бубном. DateInterval представляет собой именно разность дат и не заточен под нужды вопроса и не представляет интерфейса для получения абсолютной разности в тех или иных величинах (кроме точного количества дней). Поэтому придется взять это количество дней и работать с ним:
DateTime::diff
DateTimeInterface::diff
(PHP 5 >= 5.3.0, PHP 7, PHP 8)
Описание
Список параметров
Дата и время для сравнения.
Используется, чтобы вернуть абсолютную разницу.
Возвращаемые значения
DateInterval объект представляет разницу между двумя датами или false в случае возникновения ошибки.
Примеры
Пример #1 Пример использования DateTime::diff()
Результат выполнения данных примеров:
Пример #2 Сравнение объектов DateTime
Объекты DateTime могут сравниваться при помощи операторов сравнения.
= new DateTime ( «now» );
$date2 = new DateTime ( «tomorrow» );
Результат выполнения данного примера:
Смотрите также
User Contributed Notes 30 notes
It is worth noting, IMO, and it is implied in the docs but not explicitly stated, that the object on which diff is called is subtracted from the object that is passed to diff.
$date1 = new DateTime(‘now’);
$date2 = new DateTime(‘tomorrow’);
In some situations, this won’t say «in 1 days», but «in 0 days».
I think this is because «now» is the current time, while «tomorrow» is the current day +1 but at a default time, lets say:
Now: 08:00pm, 01.01.2015
Tomorrow: 00:00am, 02.01.2015
In this case, the difference is not 24 hour, so it will says 0 days.
Better use «today», which should also use a default value like:
Today: 00:00am, 01.01.2015
Tomorrow: 00:00am, 02.01.2015
which now is 24 hour and represents 1 day.
This may sound logical and many will say «of course, this is right», but if you use it in a naiv way (like I did without thinking), you can come to this moment and facepalm yourself.
Conclusion: «Now» is «Today», but in a different clock time, but still the same day!
After wrestling with DateTime::diff for a while it finally dawned on me the problem was both in the formatting of the input string and the formatting of the output.
The task was to calculate the duration between two date/times.
1. Make sure you have a valid date variable. Both of these strings are valid:
$strStart = ‘2013-06-19 18:25’ ;
$strEnd = ’06/19/13 21:47′ ;
?>
2. Next convert the string to a date variable
3. Calculate the difference
4. Format the output
[Modified by moderator for clarify]
Using the identical (===) comparision operator in different but equal objects will return false
If you want to quickly scan through the resulting intervals, you can use the undocumented properties of DateInterval.
The function below returns a single number of years, months, days, hours, minutes or seconds between the current date and the provided date. If the date occurs in the past (is negative/inverted), it suffixes it with ‘ago’.
It seems that while DateTime in general does preserve microseconds, DateTime::diff doesn’t appear to account for it when comparing.
= ‘2014-03-18 10:34:09.939’ ;
$val2 = ‘2014-03-18 10:34:09.940’ ;
To work around this apparent limitation/oversight, you have to additionally compare using DateTime::format.
I needed to get the exact number of days between 2 dates and was relying on the this diff function, but found that I was getting a peculiar result with:
I had to end up using :
Though I found a number of people who ran into the issue of 5.2 and lower not supporting this function, I was unable to find any solid examples to get around it. Therefore I hope this can help some others:
Работа с датами в PHP
Учебник PHP
Практика
Важное
Регулярки
Работа с htaccess
Файлы, папки
Сессии и куки
Работа с БД
Практика по работе с БД в PHP
Перед чтением см. новые уроки раздела «Важное», которые появились выше.
Практика
Движок PHP
Продвинутые БД
Аутентификация
Практика
ООП и MVC
Абстрактные классы и интерфейсы
Трейты
ООП Магия
Практика
Практика: классы как набор методов
Для работы с датами в PHP применяются различные функции. Мы начнем изучение с функции time.
Функция time, формат timestamp
Функция time возвращает разницу в секундах между 1-го января 1970 года и текущим моментом времени. Такое представление даты называется форматом timestamp.
Зачем нужен timestamp?
Время в формате timestamp используется для того, чтобы найти разницу между датами в секундах.
С помощью функции time мы можем получить только текущий момент времени. Чтобы получить timestamp за любую дату следует использовать функцию mktime:
Функция mktime
Функция mktime работает аналогично функции time, но, в отличие от нее, принимает параметры: mktime(час, минута, секунда, месяц, день, год) (обратите внимание на то, что месяц и день переставлены местами ). Посмотрите примеры работы:
Полученная разница в секундах будет выглядеть так: 682697692 (обновите страницу и это число поменяется).
Вооружившись знаниями о том, что такое формат timestamp (он нам еще понадобится в дальнейшем), изучим более полезные функции для работы с датами, например, функцию date.
Функция date
Функция date выводит текущие дату и время в заданном формате.
Формат задается управляющими командами (английскими буквами), при этом можно вставлять любые разделители между ними (дефисы, двоеточие и так далее).
Примеры работы с date:
Второй параметр функции date
Функция date имеет второй необязательный параметр, который принимает момент времени в формате timestamp. Если передать этот параметр, то функция date отформатирует не текущий момент времени, а тот, который передан вторым параметром. Этот timestamp можно получить, к примеру, через mktime (но не обязательно):
Функция strtotime
Следующая полезная функция, которую мы разберем, называется strtotime.
К примеру, я могу передать ей строку ‘2025-12-31’ и функция сама разберет, где тут год, где месяц, а где день, и вернет эту дату в формате timestamp.
Все форматы можно посмотреть тут.
Следующий код вернет дату предыдущего понедельника:
Как добавить или отнять дату
Пример 1
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 1 день и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 2
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 3
Давайте создадим объект с датой за 2025 год, 12 месяц, 31 день, затем прибавим к ней 3 дня и 1 месяц и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Пример 4
Давайте создадим объект с датой за 2025 год, 1 месяц, 1 день, затем отнимем от нее 1 день и выведем в формате ‘день.месяц.год’
Результат выполнения кода:
Что вам делать дальше:
Приступайте к решению задач по следующей ссылке: задачи к уроку.
Как получить разницу во времени в минутах в PHP
Как рассчитать разницу между двумя датами в PHP?
Вычитайте прошлое больше всего из будущего самого первого и разделите его на 60.
Времена сделаны в формате Unix, поэтому они представляют собой просто большое число, показывающее количество секунд с January 1, 1970, 00:00:00 GMT
Ответы выше для более старых версий PHP. Используйте класс DateTime для выполнения любых вычислений даты, когда PHP 5.3 является нормой. Например.
Вышеприведенный код выводит:
Всего 1837 дней
5 лет
0 месяцев
10 дней
6 часов
14 минут
2 секунды
Чтобы получить общее количество минут:
Это приведет к выводу:
Каково фактическое количество минут, прошедших между двумя датами. Класс DateTime будет учитывать летнее время (в зависимости от часового пояса), где «старый путь» не будет. Прочтите руководство по дате и времени http://www.php.net/manual/en/book.datetime.php
Вы получаете то, что хотите.
другой способ с часовым поясом.
Я думаю, это поможет вам
Я написал эту функцию для одного моего сайта блога (разница между прошлой датой и датой сервера). Это даст вам результат, подобный этому
«49 секунд назад», «20 минут назад», «21 час назад» и т. Д.
Я использовал функцию, которая бы меня разницу между датой и датой сервера.
Сохраните его, как файл, «date.php». Вызовите функцию с другой страницы, как это
Конечно, вы можете изменить функцию для передачи двух значений.
Более универсальная версия, которая возвращает результат в дни, часы, минуты или секунды, включая дроби / десятичные знаки:
Работа с датой и временем в PHP в ООП стиле. Часть 1
Перед web-разработчиками часто возникают задачи, в которых они должны работать с датой и временем. Если вы все еще используете PHP функции, такие как strtotime и date для работы с датой и временем в PHP, то вы многое упускаете.
PHP предоставляет специализированный класс DateTime для работы с датой и временем. Однако, многие игнорируют его использование, несмотря на то, что он доступен в PHP начиная с версии 5.2.
Вот несколько причин, почему предпочтительнее использовать класс DateTime вместо strtotime и date:
Создание объекта класса DateTime.
Создание объекта класса DateTime ничем не отличается от создания экземпляра какого-либо другого класса в PHP.
Если в конструктор класса DateTime не передавать параметр, то будет создан объект с текущей временной меткой и временной зоной по умолчанию. Временная зона в PHP, как правило, настраивается в файле php.ini. Вот так создается объект DateTime с текущим временем.
При необходимости мы можем передать в конструктор класса DateTime строку, представляющую собой правильную дату и время. В качестве временной зоны будет использована та, что установлена по умолчанию.
Несколько примеров создания объекта DateTime с передачей в конструктор строки, содержащей время.
$yesterday = new DateTime(‘yesterday’); // вчера
$twoDaysLater = new DateTime(‘+ 2 days’); // на 2 дня вперед
$oneWeekEarly = new DateTime(‘- 1 week’); // минус одна неделя
Второй параметр конструктора класса DateTime позволяет определить временную зону. Этот параметр имеет тип DateTimeZone.
Например, чтобы создать объект класса DateTime с временной зоной Москвы надо сделать следующее:
$yesterdayInMoscow = new DateTime(‘yesterday’, new DateTimeZone(‘Moscow’));
Конечно, мы также можем создать объект DateTime как обычно, с помощью строки.
$dateTime = new DateTime(‘2015-01-01 12:30:12’);
Формат
В зависимости от системы, которую мы собираемся проектировать, нам могут понадобится различные форматы даты и времени. Форматирование объекта DateTime в формат необходимый в конкретном проекте достаточно просто делается через метод DateTime::format().
Метод DateTime::format() принимает в качестве параметра строку. Эта строка может включать плейсхолдеры, перечисленные на странице официальной документации PHP.
Например, чтобы получить подобный формат YYYY-dd-mm, где Y – год, d – день, m – месяц необходимо сделать следующее:
Мы можем создать любой желаемый формат даты. Вот несколько дополнительных опций:
print_r($now->format(‘jS F Y’));
print_r($now->format(‘ga jS M Y’));
print_r($now->format(‘Y/m/d s:i:H’));
Сравнение дат и времени
Для того, чтобы сравнить две даты с помощью встроенной в PHP функции strtotime, нам сначала нужно преобразовать строковое содержимое этих дат в их эквиваленты временных меток.
В отличие же, от данной функции, объект DateTime предоставляет возможность сравнивать два объекта DateTime как два обычных числа. Вот несколько примеров:
$today = new DateTime(‘today’);
$yesterday = new DateTime(‘yesterday’);
Но бывают случаи, когда логическое значение от сравнения двух дат недостаточно. Например, нам нужно знать, точную разницу между двумя датами. И DateTime::diff() является тем методом, который поможет нам узнать разницу между двумя объектами DateTime. Этот метод возвращает объект класса DateInterval, который может быть использован для получения интервала, в любом требуемом нами формате посредством метода DateInterval::format.
Например, для получения количества дней между сегодняшней датой и вчерашней датой, мы можем сделать следующее:
Со всем разнообразием свойств класса DateInterval вы можете ознакомиться на официальном сайте PHP.
На этом все, и в следующей статье мы продолжим изучать классы для работы с датой и временем в PHP.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 3 ):
Всем привет извините что пишу здесь но е могли бы подсказать хотел бы узнать как сделать так что бы ретрансляцию для моего сайта хочу чтобы например телеканал тнт транслировалась прямо с моего сайта а не сервера тнт.. Вот этот сайт введет трансляцию мачт тв с своего сервера http://fifa.beta.tj/schedule
Уточните, пожалуйста, вы хотите чтобы, когда пользователь заходил к Вам на сайт, то он мог бы смотреть передачу на вашем сайте?
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.
Copyright © 2010-2021 Русаков Михаил Юрьевич. Все права защищены.