- Операции с датами и временем Unixtime в PHP
- Получение временных меток и дат
- Число дня недели
- Числа месяца
- Текущий месяц:
- Преведущий месяц:
- Следующий месяц:
- Число дней в текущем месяце
- Порядковый номер недели
- Число дней в текущем году
- Текущий квартал
- Арифметические операции
- Прибавить к дате 10 секунд
- Прибавить к дате 10 минут
- Прибавить к дате 1 час
- Прибавить к дате 1 день
- Прибавить к дате неделю
- Прибавить к дате месяц
- Прибавить к дате год
- Сколько прошло
- Сколько прошло c 8:00
- Сколько прошло c понедельника этой недели
- Сколько прошло c начала года
- Сколько прошло c определённой даты
- Сколько остается
- Сколько остается до 23:00
- Сколько остается до конца недели
- Сколько остается до конца месяца
- Сколько остается до конца года
- Сколько остается до определенной даты
- Время между датами
- Количество часов между датами
- Количество дней между датами
- Количество месяцев между датами
- Комментарии 2
- Другие публикации
- PHP – сколько дней/часов/минут/секунд осталось до даты
- Как на PHP рассчитать время до указанного события
- Объективный таймер обратного отсчёта на PHP
- В чём идея
- Что понадобится
- Добавляем на странице место для таймера
- Пишем скрипт на странице
- Готовим PHP-скрипт
- Вычислить сколько осталось дней
- Решение
Операции с датами и временем Unixtime в PHP
Unix-время (англ. Unix time, также POSIX-время) — система описания моментов во времени. Определяется как количество секунд, прошедших с полуночи 1 января 1970 года.
В PHP текущую метку времени возвращает функция time() и функция strtotime(), также с unix-метками работает класс DateTime.
Получение временных меток и дат
Число дня недели
// Понедельник текущей недели: $time = strtotime('this week monday, 00:00'); echo date('d.m.Y H:i', $time); // 17.07.2023 00:00 // Понедельник предыдущий недели: $time = strtotime('previous week monday, 00:00'); echo date('d.m.Y H:i', $time); // 10.07.2023 00:00 // Понедельник следующей недели: $time = strtotime('next monday, 00:00'); echo date('d.m.Y H:i', $time); // 24.07.2023 00:00
Числа месяца
Текущий месяц:
// Первый день текущего месяца: $time = strtotime('first day of this month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.07.2023 00:00:00 // Последний день текущего месяца: $time = strtotime('last day of this month 23:59'); echo date('d.m.Y H:i:s', $time); // 31.07.2023 23:59:00
Преведущий месяц:
// Первый день предыдущего месяца: $time = strtotime('first day of previous month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.06.2023 00:00:00 // Последний день предыдущего месяца: $time = strtotime('last day of previous month 23:59'); echo date('d.m.Y H:i:s', $time); // 30.06.2023 23:59:00
Следующий месяц:
// Первый день следующего месяца: $time = strtotime('first day of next month 00:00'); echo date('d.m.Y H:i:s', $time); // 01.08.2023 00:00:00 // Последний день следующего месяца: $time = strtotime('last day of next month 23:59'); echo date('d.m.Y H:i:s', $time); // 31.08.2023 23:59:00
Число дней в текущем месяце
Порядковый номер недели
Число дней в текущем году
echo date('L') ? 366 : 365; // 365
Текущий квартал
echo intval((date('n') + 2) / 3); // 3
Арифметические операции
Для сложения и вычитания времени можно применить функцию strtotime() или просто работать с секундами:
1 минута | 60 секунд | 10 минут | 600 секунд |
1 час | 3600 секунд | 10 часов | 36000 секунд |
1 день | 86400 секунд | 2 дня | 172800 секунд |
1 неделя | 604800 секунд | 2 недели | 1209600 секунд |
1 месяц | 2629743 секунд | 2 месяца | 5259486 секунд |
1 год | 31556926 секунд | 2 года | 63072000 секунд |
Прибавить к дате 10 секунд
$time = time() + 10; echo date('d.m.Y H:i:s', $time); // 20.07.2023 11:53:12 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2023 11:53:12
Прибавить к дате 10 минут
$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 20.07.2023 12:03:02 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2023 12:03:02
Прибавить к дате 1 час
$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 20.07.2023 12:53:02 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2023 12:53:02
Прибавить к дате 1 день
$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 21.07.2023 11:53:02 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 21.07.2023 11:53:02
Прибавить к дате неделю
$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 27.07.2023 11:53:02
Прибавить к дате месяц
$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 20.08.2023 11:53:02
Прибавить к дате год
$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2024 11:53:02
Сколько прошло
Сколько прошло c 8:00
$date = date('d.m.Y 08:00'); $diff = time() - strtotime($date); echo round($diff / 3600, 1); // 3,9 часов
Сколько прошло c понедельника этой недели
$time = strtotime('monday'); $diff = time() - $time; echo round($diff / 3600); // 84 часов echo round($diff / 86400, 1); // 3,5 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько прошло c начала года
$date = date('01.01.Y 00:00:00'); $diff = time() - strtotime($date); echo intval($diff / 86400); // 200 дней // или echo date('z'); // 200
Сколько прошло c определённой даты
$date = '10.08.2016'; $diff = time() - strtotime($date); echo round($diff / 3600); // 60852 часов echo round($diff / 86400); // 2535 дней
Сколько остается
Сколько остается до 23:00
$time = strtotime(date('d.m.Y 23:00')); $diff = $time - time(); echo round($diff / 3600, 1); // 11,1 часов
Сколько остается до конца недели
$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 84 часов echo round($diff / 86400); // 4 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько остается до конца месяца
$time = strtotime(date('Y-m-t 23:59')); $diff = $time - time(); echo round($diff / 3600); // 276 часов echo round($diff / 86400); // 12 дней
Сколько остается до конца года
$time = strtotime(date('Y-12-31 23:59')); $diff = $time - time(); echo round($diff / 3600); // 3948 часов echo round($diff / 86400); // 165 дней
Сколько остается до определенной даты
$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 18036 часов echo round($diff / 86400); // 752 дней
Время между датами
Количество часов между датами
$date_1 = '01.01.2021 10:00'; $date_2 = '10.03.2021 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 3600); // 1640
Количество дней между датами
$date_1 = '01.01.2021 10:00'; $date_2 = '10.03.2021 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 68,3
Количество месяцев между датами
$date_1 = strtotime('01.01.2021 10:00'); $date_2 = strtotime('10.03.2021 18:00'); $months = 0; while (strtotime('+1 month', $date_1) < $date_2) < $months++; $date_1 = strtotime('+1 month', $date_1); >$days = round(($date_2 - $date_1) / (60 * 60 * 24)); echo $months . ' месяца, ' . $days . ' дней'; // 2 месяца, 9 дней
Комментарии 2
Специально не поленился и авторизовался, чтобы выразить благодарность авторам сайта, молодцы ребята! Неоднократно на вашем сайте получал именно нужную инфу, у вас все примеры разжеваны, с разными вариантами, не то что где нибудь найдешь вроде то, что тебе нужно и потом полдня думаешь, как под свою задачу это допилить. В данном случае мне нужно было кол-во дней между датами, при чем число должно быть дробным — то есть 3.6 дня, например. У вас нашел, скопировал, и вставил (только имена переменных поменял), все. Именно то, что нужно. И так бывало уже не раз. В общем, спасибо, и обязательно продолжайте в том же духе!
Авторизуйтесь, чтобы добавить комментарий.
Другие публикации
Заголовок Last-Modified помогает оптимизировать загрузку web-страниц и облегчить работу поисковым роботам.
PHP – сколько дней/часов/минут/секунд осталось до даты
Скрипт на пхп, который выводит оставшееся время до введенной даты.
Как на PHP рассчитать время до указанного события
/** * Счетчик обратного отсчета * * @param mixed $date * @return */ function downcounter($date) < $check_time = strtotime($date) - time(); if($check_time $days = floor($check_time/86400); $hours = floor(($check_time%86400)/3600); $minutes = floor(($check_time%3600)/60); $seconds = $check_time%60; $str = ''; if($days > 0) $str .= declension($days,array('день','дня','дней')).' '; if($hours > 0) $str .= declension($hours,array('час','часа','часов')).' '; if($minutes > 0) $str .= declension($minutes,array('минута','минуты','минут')).' '; if($seconds > 0) $str .= declension($seconds,array('секунда','секунды','секунд')); return $str; > /** * Функция склонения слов * * @param mixed $digit * @param mixed $expr * @param bool $onlyword * @return */ function declension($digit,$expr,$onlyword=false)< if(!is_array($expr)) $expr = array_filter(explode(' ', $expr)); if(empty($expr[2])) $expr[2]=$expr[1]; $i=preg_replace('/[^0-9]+/s','',$digit)%100; if($onlyword) $digit=''; if($i>=5 && $i<=20) $res=$digit.' '.$expr[2]; else < $i%=10; if($i==1) $res=$digit.' '.$expr[0]; elseif($i>=2 && $i <=4) $res=$digit.' '.$expr[1]; else $res=$digit.' '.$expr[2]; >return trim($res); >
- downcounter() – функция счетчика обратного отсчета
- declension() – вспомогательная функция, для склонения слов
Вводим дату события, которая обязательно должна быть больше текущей. Применять функцию подсчета даты можно так:
Как вы понимаете, вешать скрипт, который отправляет ajax запрос на сервер каждую секунду, не очень хорошо :). В следующих статьях вы узнаете как при помощи js показывать актуальное время.
Объективный таймер обратного отсчёта на PHP
Недавно мы разобрались с тем, как можно показывать новые данные на странице без перезагрузки, а до этого — как использовать PHP-скрипты. Сегодня объединим это в один проект и сделаем таймер обратного отсчёта на PHP.
В чём идея
Допустим, у нас есть какое-то событие, которое заканчивается 16 октября 2022 года в 14:00 — например распродажа. Нам нужно вывести таймер на страницу, который будет отсчитывать время до этого события.
При этом нам важно, чтобы отсчёт не зависел от пользователя: например, если он переставит дату на календаре своего компьютера на 1 сентября, то чтобы у него не появилось 9 дополнительных дней распродажи. Поэтому мы не можем использовать дату и время с компьютера пользователя, нам нужно брать их с сервера.
Получается, что алгоритм будет работать так:
- берём дату с сервера;
- берём время с сервера;
- находим разницу с искомой датой (16 октября 2022) и показываем, сколько времени осталось до наступления события;
- если дата уже прошла, сообщаем об этом (отложим на другую итерацию, потому что событие только через год).
Раз у нас дата лежит на сервере, то и отдавать мы будем её при помощи PHP-скрипта. Но раз сервер всё равно нам что-то отдаёт, то пусть это сразу будет готовый таймер с текстом, а мы его встроим на страницу. Это значит, что нам нужен такой скрипт, который просто будет постоянно через PHP получать с сервера данные и отправлять их в нужное место на странице.
Что понадобится
Единственное, что нам нужно от сервера, — чтобы он мог выполнять PHP-скрипты. Это умеет делать практически любой веб-сервер в интернете, поэтому, если у вас есть хостинг и на хостинге можно размещать сайты, — скрипт тоже будет там работать.
Если хостинга с сайтом нет, то можно сделать так: установить MAMP и получить рабочий сервер с PHP у себя на компьютере.
Добавляем на странице место для таймера
Так как всю работу будут делать скрипты, то нам нужно просто указать место на странице, куда отправить результат. Возьмём наш учебный сайт mihailmaximov.ru и перед разделом с контактами добавим блок для таймера:
Этого будет достаточно, чтобы скрипт показал таймер в выбранном месте.
Пишем скрипт на странице
Первым делом подключаем jQuery — это позволит нам работать с AJAX-скриптом и вызывать его самым простым способом.
Теперь в раздел добавляем простой скрипт на JavaScript. Его задача — периодически обращаться к серверу и обновлять данные на странице. Благодаря AJAX он сможет это делать без перезагрузки, работая с отдельным блоком:
Готовим PHP-скрипт
Мы уже работали с PHP-скриптами, когда делали форму обратной связи, и там же рассказывали, как загрузить этот скрипт на сервер. Если пропустили этот цикл — будет полезно:
Вычислить сколько осталось дней
Посчитать сколько дней осталось дня рождения
Несколько дней ломаю голову с этим чудом. Нужно подсчитать сколько осталось.
Сколько лет, месяцев, дней, часов осталось до заданной даты
Нужно написать скрипт, вычисляющий сколько лет, месяцев, дней, часов осталось до заданной даты.
Diff — как узнать, сколько осталось дней, часов, минут, секунд ?
Здравствуйте! Подскажите пожалуйста, как при помощи diff узнать сколько осталось дней, часов.
Отсчет времени, а-ля ‘Осталось столько-то дней’
Есть определенная дата в будущем. Нужно при каждой загрузки страницы сверять текущую дату с нужной.
Сообщение было отмечено Denis97832 как решение
Решение
$aDate = time(); // Текущая дата $bDate = strtotime("30.05.2016"); // Установленная мною дата $datediff = $bDate - $aDate; echo floor($datediff/(60*60*24));