- Функция подсчета сколько времени прошло в PHP
- Операции с датами и временем Unixtime в PHP
- Получение временных меток и дат
- Число дня недели
- Числа месяца
- Текущий месяц:
- Преведущий месяц:
- Следующий месяц:
- Число дней в текущем месяце
- Порядковый номер недели
- Число дней в текущем году
- Текущий квартал
- Арифметические операции
- Прибавить к дате 10 секунд
- Прибавить к дате 10 минут
- Прибавить к дате 1 час
- Прибавить к дате 1 день
- Прибавить к дате неделю
- Прибавить к дате месяц
- Прибавить к дате год
- Сколько прошло
- Сколько прошло c 8:00
- Сколько прошло c понедельника этой недели
- Сколько прошло c начала года
- Сколько прошло c определённой даты
- Сколько остается
- Сколько остается до 23:00
- Сколько остается до конца недели
- Сколько остается до конца месяца
- Сколько остается до конца года
- Сколько остается до определенной даты
- Время между датами
- Количество часов между датами
- Количество дней между датами
- Количество месяцев между датами
- Комментарии 2
- Другие публикации
- Сколько прошло времени с указанной даты
- Как у знать сколько времени прошло (timestamp)?
Функция подсчета сколько времени прошло в PHP
Считаете ли вы этот сниппет полезным? То поделитесь этим с друзьями или коллегами. Это поможет нам сделать наши бесплатные веб-инструменты лучше.
Это можно использовать для комментариев, сообщений и т.д., чтобы узнать сколько времени прошло с момента публикации, а не точное время, что может быть неверным для кого-то в другом часовом поясе.
Ввод может быть любым поддерживаемым форматом даты и времени.
function time_elapsed_string($datetime, $full = false) < $now = new DateTime; $ago = new DateTime($datetime); $diff = $now->diff($ago); $diff->w = floor($diff->d / 7); $diff->d -= $diff->w * 7; $string = [ 'y' => 'year', 'm' => 'month', 'w' => 'week', 'd' => 'day', 'h' => 'hour', 'i' => 'minute', 's' => 'second', ]; foreach ($string as $k => &$v) < if ($diff->$k) < $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); > else < unset($string[$k]); >> if (!$full) $string = array_slice($string, 0, 1); return $string ? implode(', ', $string) . ' ago' : 'just now'; > echo time_elapsed_string('2017-05-05 00:22:35').PHP_EOL; echo time_elapsed_string('@1493943755').PHP_EOL; # timestamp input echo time_elapsed_string('2017-05-05 00:22:35', true).PHP_EOL;
Без использования DateTime и ввод должен быть в UNIX формате:
$a = array( 365 * 24 * 60 * 60 => 'year', 30 * 24 * 60 * 60 => 'month', 24 * 60 * 60 => 'day', 60 * 60 => 'hour', 60 => 'minute', 1 => 'second' ); $a_plural = array( 'year' => 'years', 'month' => 'months', 'day' => 'days', 'hour' => 'hours', 'minute' => 'minutes', 'second' => 'seconds' ); foreach ($a as $secs => $str)< $d = $diff / $secs; if ($d >= 1) < $r = round($d); return $r . ' ' . ($r >1 ? $a_plural[$str] : $str) . ' ago'; > > > echo time_elapsed_string(1493943755);
Операции с датами и временем 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); // 23.07.2023 20:10:28 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 23.07.2023 20:10:28
Прибавить к дате 10 минут
$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 23.07.2023 20:20:19 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 23.07.2023 20:20:19
Прибавить к дате 1 час
$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 23.07.2023 21:10:19 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 23.07.2023 21:10:19
Прибавить к дате 1 день
$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 24.07.2023 20:10:19 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 24.07.2023 20:10:19
Прибавить к дате неделю
$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 30.07.2023 20:10:19
Прибавить к дате месяц
$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 23.08.2023 20:10:19
Прибавить к дате год
$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 23.07.2024 20:10:19
Сколько прошло
Сколько прошло c 8:00
$date = date('d.m.Y 08:00'); $diff = time() - strtotime($date); echo round($diff / 3600, 1); // 12,2 часов
Сколько прошло c понедельника этой недели
$time = strtotime('monday'); $diff = time() - $time; echo round($diff / 3600); // 164 часов echo round($diff / 86400, 1); // 6,8 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько прошло c начала года
$date = date('01.01.Y 00:00:00'); $diff = time() - strtotime($date); echo intval($diff / 86400); // 203 дней // или echo date('z'); // 203
Сколько прошло c определённой даты
$date = '10.08.2016'; $diff = time() - strtotime($date); echo round($diff / 3600); // 60932 часов echo round($diff / 86400); // 2539 дней
Сколько остается
Сколько остается до 23:00
$time = strtotime(date('d.m.Y 23:00')); $diff = $time - time(); echo round($diff / 3600, 1); // 2,8 часов
Сколько остается до конца недели
$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 172 часов echo round($diff / 86400); // 7 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько остается до конца месяца
$time = strtotime(date('Y-m-t 23:59')); $diff = $time - time(); echo round($diff / 3600); // 196 часов echo round($diff / 86400); // 8 дней
Сколько остается до конца года
$time = strtotime(date('Y-12-31 23:59')); $diff = $time - time(); echo round($diff / 3600); // 3868 часов echo round($diff / 86400); // 161 дней
Сколько остается до определенной даты
$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 17956 часов echo round($diff / 86400); // 748 дней
Время между датами
Количество часов между датами
$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-страниц и облегчить работу поисковым роботам.
Сколько прошло времени с указанной даты
Вернуть, сколько прошло времени с указанной даты можно через метод DateTime::diff() .
$date = new DateTime('1990-11-05 00:00:00'); echo $date->diff(new DateTime)->format('прошло %d дней %m месяца %y лет'); // прошло 5 дней 2 месяца 29 лет
Функция ниже возвращает время до указанной даты в сокращённом виде.
function time_ago($datetime) < $interval = date_create('now')->diff($datetime); if ($interval->y >= 1) return $interval->y.' лет';> if ($interval->m >= 1) return $interval->m.' месяца';> if ($interval->d >= 1) return $interval->d.' дней';> if ($interval->h >= 1) return $interval->h.' часов';> if ($interval->i >= 1) return $interval->i.' минут';> return $interval->s.' секунд'; > time_ago(new DateTime('1990-11-05')); // 29 лет time_ago(new DateTime('2017-11-05')); // 2 месяца time_ago(new DateTime('2018-01-05')); // 5 дней
Авторизуйтесь, чтобы добавлять комментарии
Как у знать сколько времени прошло (timestamp)?
Никак не могу сообразить как в php высчитать сколько времени прошло по timestamp. В БД хранится инфо о каждом устройстве в том числе время в формате timestamp, которе прошло с момента запуска устройства. Подскажите пожалуйста как мне распарсить такой timestamp? Кто-нибудь сталкивался с такой задачей?
Оказыватся время которое хранится в БД не timestamp а так называеый timeticks. Здесь все просто: timeticks / 100 получаю секунды и их уже конвертирую. Спасибо за ваши отклики))
unix timestamp — время в секундах с 00:00:00 01.01.1970 UTC.
Функция time() в PHP возвращает текущее значение timestamp’а.
Вычитаете из текущего значения сохранённое — получаете прошедшее количество секунд.
timestamp показывает сколько секунд прошло с 1970 года. Я так подозреваю, что в вашей БД хранится не время с момента запуска устройства, а timestamp последнего включения. Если вы хотите узнать сколько секунд прошло с момента последнего включения то можно, например, сделать time() — $row[‘вашTimestamp’]; Если же вы хотите показать время включения в человекопонятном виде, то можно сделать gmdate(«Y-m-d\TH:i:s\Z», $row[‘вашTimestamp’]);