Вычислить количество дней php

Содержание
  1. Алгоритм, считающий сколько дней прошло от определенной даты
  2. 2 ответа 2
  3. Как получить все дни между датами в PHP
  4. Количество дней между датами
  5. Формирование массива, содержащий все дни из интервала
  6. Результат:
  7. Функция на основе strtotime
  8. Результат:
  9. Разница между датами
  10. 3 ответа 3
  11. Операции с датами и временем Unixtime в PHP
  12. Получение временных меток и дат
  13. Число дня недели
  14. Числа месяца
  15. Текущий месяц:
  16. Преведущий месяц:
  17. Следующий месяц:
  18. Число дней в текущем месяце
  19. Порядковый номер недели
  20. Число дней в текущем году
  21. Текущий квартал
  22. Арифметические операции
  23. Прибавить к дате 10 секунд
  24. Прибавить к дате 10 минут
  25. Прибавить к дате 1 час
  26. Прибавить к дате 1 день
  27. Прибавить к дате неделю
  28. Прибавить к дате месяц
  29. Прибавить к дате год
  30. Сколько прошло
  31. Сколько прошло c 8:00
  32. Сколько прошло c понедельника этой недели
  33. Сколько прошло c начала года
  34. Сколько прошло c определённой даты
  35. Сколько остается
  36. Сколько остается до 23:00
  37. Сколько остается до конца недели
  38. Сколько остается до конца месяца
  39. Сколько остается до конца года
  40. Сколько остается до определенной даты
  41. Время между датами
  42. Количество часов между датами
  43. Количество дней между датами
  44. Количество месяцев между датами
  45. Комментарии 2
  46. Другие публикации

Алгоритм, считающий сколько дней прошло от определенной даты

Доброго всем времени суток. Есть ли у кого алгоритм, считающий сколько дней прошло от определенной даты? И есть ли у кого соображения, как это написать? Есть ли функции такие? На ум пришло только дни поделить на 365,25, месяцы на 12, а разницу в годах умножить на 365,25. но получается не точно. Хочется, что-то вроде:

2 ответа 2

$today = time(); $moon = mktime(0, 0, 0, 7, 21, 1969); echo "Америкосы были на луне ".floor(($today - $moon) / 86400)." дней назад."; 

Ну это очень грубо. Хотя у меня тоже грубовато достаточно и не стал решения делать для дат которые меньше 1970 года. (Просто было лень.)

function vypiska($skolko, $chego) < global $array; if ($skolko == 0) $skolko = 10; if ($skolko == 1) $a = 3 * $chego + 1; if ($skolko >= 2 && $skolko = 5 && $skolko 20 && $skolko < 100) return vypiska($skolko % 10, $chego); if ($skolko >= 100) return vypiska($skolko % 100, $chego); return $array[$a]; > $array = array( "", "день", "дня", "дней", "месяц", "месяца", "месяцев", "год", "года", "лет" ); $std = $_GET['d']; $ed = mktime(0, 0, 0, date("m,d,Y")); $e = abs($ed - $std); $f = date('j-n-Y', $e); $dat = explode("-", $f); $day = $dat[0] - 1; $month = $dat[1] - 1; $year = $dat[2] - 1970; $soob = $text . " "; if ($year != 0) $soob = $soob . $year . " " . vypiska($year, 2); if ($year != 0 && $month != 0 && $day != 0) $soob = $soob . ", "; if ($year != 0 && $month != 0 && $day == 0) $soob = $soob . " и "; if ($month == 0 && $day != 0 && $year != 0) $soob = $soob . " и "; if ($month != 0) $soob = $soob . $month . " " . vypiska($month, 1); if ($month != 0 && $day != 0) $soob = $soob . " и "; if ($day != 0) $soob = $soob . $day . " " . vypiska($day, 0) . "."; 

Источник

Читайте также:  Website designed by php

Как получить все дни между датами в PHP

Несколько примеров как найти все дни в промежутке между двумя датами в виде значения и списка.

Количество дней между датами

$date_1 = '28.03.2022 00:00'; $date_2 = '02.04.2022 23:59'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 6
$date_1 = '28.03.2022 00:00'; $date_2 = '02.04.2022 18:00'; $seconds = abs(strtotime($date_1) - strtotime($date_2)); echo round($seconds / 86400, 1); // 5.6

Формирование массива, содержащий все дни из интервала

Первый способ – использование классов DatePeriod, DateTime и DateInterval (доступны с версии PHP 5.3).

* Если в конечной дате не указать время (23:59), то в результирующем массиве не будет последнего дня.

$period = new DatePeriod( new DateTime('28.03.2022'), new DateInterval('P1D'), new DateTime('02.04.2022 23:59') ); $dates = array(); foreach ($period as $key => $value) < $dates[] = $value->format('d.m.Y'); > print_r($dates);

Результат:

Array ( [0] => 28.03.2022 [1] => 29.03.2022 [2] => 30.03.2022 [3] => 31.03.2022 [4] => 01.04.2022 [5] => 02.04.2022 )

Функция на основе strtotime

function get_dates($start, $end, $format = 'd.m.Y') < $day = 86400; $start = strtotime($start . ' -1 days'); $end = strtotime($end . ' +1 days'); $nums = round(($end - $start) / $day); $days = array(); for ($i = 1; $i < $nums; $i++) < $days[] = date($format, ($start + ($i * $day))); >return $days; > $dates = get_dates('28.03.2022', '02.04.2022'); print_r($dates);

Результат:

Array ( [0] => 28.03.2022 [1] => 29.03.2022 [2] => 30.03.2022 [3] => 31.03.2022 [4] => 01.04.2022 [5] => 02.04.2022 )

Источник

Разница между датами

Каким образом можно детально узнать разницу между двумя датами (сегодняшняя и некая, записанная в переменной) таким образом, чтобы результат был записан в 4 переменных: N лет, N месяцев, N часов, N минут? То есть, нужны именно 4 отдельных переменных для последующей работы с ними.

Надо перевести обе даты в UNIXTIME(), вычесть друг из друга. Полученное число — кол-во секунд между двумя датами. Далее в сети можно найти готовые функции, которые переводят занчение в секундах в нужные Вам 4 переменные

3 ответа 3

$now = new DateTime(); // текущее время на сервере $date = DateTime::createFromFormat("Y-m-d H:i", '2014-09-12 23:59'); // задаем дату в любом формате $interval = $now->diff($date); // получаем разницу в виде объекта DateInterval echo $interval->y, "\n"; // кол-во лет echo $interval->d, "\n"; // кол-во дней echo $interval->h, "\n"; // кол-во часов echo $interval->i, "\n"; // кол-во минут 

\n добавлен только для удобства просмотра результатов, соответственно вместо echo присваиваем переменным или работаем напрямую со свойствами DateInterval

Мне пришлось писать функцию для себя, может кому понадобится:

function getPeriod($date1,$date2)< $interval = date_diff($date1, $date2); $y='';$m='';$d=''; if ($interval->y>0) < if ($interval->y>4) $y .=$interval->y . ' лет'; else if ($interval->y == 1) $y .=$interval->y . ' год'; else $y .=$interval->y . ' года'; $y .= ', '; > if ($interval->m>0) < if ($interval->m>4) $m .= $interval->m . ' месяцев'; else if ($interval->m>1) $m .= $interval->m . ' месяца'; else $m .= $interval->m . ' месяц'; $m .= ', '; > if ($interval->d>0) < if ($interval->d>4) $d .= $interval->d . ' дней'; else if ($interval->d>1) $d .= $interval->d . ' дня'; else $d .= $interval->d . ' день'; > return $y . $m . $d; > 
$date1 = new DateTime('2001-01-1'); $date2 = new DateTime('2012-12-4'); $period = getPeriod($date1,$date2); 

Источник

Операции с датами и временем 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 04:10:54 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2023 04:10:54

Прибавить к дате 10 минут

$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 20.07.2023 04:20:44 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2023 04:20:44

Прибавить к дате 1 час

$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 20.07.2023 05:10:44 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2023 05:10:44

Прибавить к дате 1 день

$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 21.07.2023 04:10:44 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 21.07.2023 04:10:44

Прибавить к дате неделю

$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 27.07.2023 04:10:44

Прибавить к дате месяц

$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 20.08.2023 04:10:44

Прибавить к дате год

$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 20.07.2024 04:10:44

Сколько прошло

Сколько прошло c 8:00

$date = date('d.m.Y 08:00'); $diff = time() - strtotime($date); echo round($diff / 3600, 1); // -3,8 часов

Сколько прошло c понедельника этой недели

$time = strtotime('monday'); $diff = time() - $time; echo round($diff / 3600); // 76 часов echo round($diff / 86400, 1); // 3,2 дней

*Дни недели: 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); // 60844 часов echo round($diff / 86400); // 2535 дней

Сколько остается

Сколько остается до 23:00

$time = strtotime(date('d.m.Y 23:00')); $diff = $time - time(); echo round($diff / 3600, 1); // 18,8 часов

Сколько остается до конца недели

$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 92 часов 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); // 284 часов echo round($diff / 86400); // 12 дней

Сколько остается до конца года

$time = strtotime(date('Y-12-31 23:59')); $diff = $time - time(); echo round($diff / 3600); // 3956 часов echo round($diff / 86400); // 165 дней

Сколько остается до определенной даты

$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 18044 часов 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

Заголовок Last-Modified помогает оптимизировать загрузку web-страниц и облегчить работу поисковым роботам.

Источник

Оцените статью