Количество недель месяце php

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

Операции с датами и временем 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); // 24.07.2023 00:00 // Понедельник предыдущий недели: $time = strtotime('previous week monday, 00:00'); echo date('d.m.Y H:i', $time); // 17.07.2023 00:00 // Понедельник следующей недели: $time = strtotime('next monday, 00:00'); echo date('d.m.Y H:i', $time); // 31.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() или просто работать с секундами:

Читайте также:  Где пишется код php
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); // 30.07.2023 02:00:56 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 30.07.2023 02:00:56

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

$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 30.07.2023 02:10:46 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 30.07.2023 02:10:46

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

$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 30.07.2023 03:00:46 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 30.07.2023 03:00:46

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

$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 31.07.2023 02:00:46 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 31.07.2023 02:00:46

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

$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 06.08.2023 02:00:46

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

$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 30.08.2023 02:00:46

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

$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 30.07.2024 02:00:46

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

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

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

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

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

*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Сколько прошло c начала года

$date = date('01.01.Y 00:00:00'); $diff = time() - strtotime($date); echo intval($diff / 86400); // 210 дней // или echo date('z'); // 210

Сколько прошло c определённой даты

$date = '10.08.2016'; $diff = time() - strtotime($date); echo round($diff / 3600); // 61082 часов echo round($diff / 86400); // 2545 дней

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

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

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

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

$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 190 часов echo round($diff / 86400); // 8 дней

*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.

Читайте также:  Django and python ide

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

$time = strtotime(date('Y-m-t 23:59')); $diff = $time - time(); echo round($diff / 3600); // 46 часов echo round($diff / 86400); // 2 дней

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

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

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

$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 17806 часов echo round($diff / 86400); // 742 дней

Время между датами

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

$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 дня, например. У вас нашел, скопировал, и вставил (только имена переменных поменял), все. Именно то, что нужно. И так бывало уже не раз. В общем, спасибо, и обязательно продолжайте в том же духе!

Авторизуйтесь, чтобы добавить комментарий.

Читайте также:  Активация email на php

Другие публикации

Как настроить Last-Modified

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

Источник

Как узнать количество недель в месяц в PHP?

Это внутри for петля, которая делает $week идти от 1 на количество недель в течение всего года.

Что я заметил, так это то, что в течение некоторых лет последний понедельник декабря по сравнению с предыдущим годом также включен туда, например: 29/12/2014 когда я выбираю 2015 в фильтре.

До сих пор, чтобы определить количество недель в месяце, я использовал программно подсчитывать количество понедельников в указанном месяце и использовал его в качестве colspan для строки над строкой дат, и, таким образом, для января не учитываются недели в течение нескольких лет, что делает смену стола.

Рендеринг HTML за год 2015 будет выглядеть так

   January February [. ]  29/12/2014 05/01/2015 12/01/2015 19/01/2015 26/01/2015 02/02/2015 [. ]  [. ] 

И после поиска и тестирования большого количества счетчиков за неделю в месяце ни один из тех, что я обнаружил, похоже, не включал последний понедельник предыдущего года.

Может ли кто-нибудь узнать, как подсчитать недели, включая эту дополнительную неделю по сравнению с предыдущим годом?

4 ответа

Недавно сделал листинг довольно похожий на Carbon. Вот Snipped с некоторыми примерами вывода:

copy()->endOfYear(); $months = []; for (; $counter addWeek()) < // just to avoid E_NOTICE if (!isset($months[$counter->month])) < $months[$counter->month] = [ 'count' => 0, 'weekstarts' => [], ]; > ++$months[$counter->month]['count']; $months[$counter->month]['weekstarts'][] = $counter->copy(); > foreach ($months as $month) < printf('Month has %d weeks', $month['count']); echo PHP_EOL; foreach ($month['weekstarts'] as $num =>$weekStartDate) < printf('Week %d starts at %s', $num + 1, $weekStartDate); echo PHP_EOL; >echo PHP_EOL; > 

Количество недель, приходящихся на данный месяц, в основном представляет собой количество дней в месяце плюс смещение, которое зависит от того, в какой день недели начался месяц, деленное на 7. Вот решение с использованием DateInterval и DatePeriod:

/** * Get number of weeks starting *Monday*, occuring in a given month. * A week occurs in a month if any day from that week falls in the month. * @param $month_date is expected to be DateTime. * @param $count_last count partial week at the end of month as part of month. */ function weeks_in_month($month_date, $count_last=true) < $fn = $count_last ? 'ceil' : 'floor'; $start = new DateTime($month_date->format('Y-m')); $days = (clone $start)->add(new DateInterval('P1M'))->diff($start)->days; $offset = $month_date->format('N') - 1; return $fn(($days + $offset)/7); > /** * Wrapper over weeks_in_month() to get weeks in month for each month of a given year. * @param $year_date is expected to be a DateTime. */ function year_month_weeks($year_date, $count_last=true) < $start = new DateTime($year_date->format('Y') . '-01'); $year_month_weeks = []; foreach(new DatePeriod($start, new DateInterval('P1M'), 11) as $month) < $year_month_weeks[] += weeks_in_month($month, $count_last); >return $year_month_weeks; > print_r(year_month_weeks(new DateTime('2008-01'), true)); 
Array ( [0] => 5 [1] => 5 [2] => 6 [3] => 5 [4] => 5 [5] => 6 [6] => 5 [7] => 5 [8] => 5 [9] => 5 [10] => 5 [11] => 5 ) 

Это можно проверить по результатам cal , Для первых 6 месяцев 2008 года должно быть 6 недель в марте, 5 июня для отдыха:

>ncal -Mb -m 1 -A 5 2008 2008 January February March Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 1 2 3 1 2 7 8 9 10 11 12 13 4 5 6 7 8 9 10 3 4 5 6 7 8 9 14 15 16 17 18 19 20 11 12 13 14 15 16 17 10 11 12 13 14 15 16 21 22 23 24 25 26 27 18 19 20 21 22 23 24 17 18 19 20 21 22 23 28 29 30 31 25 26 27 28 29 24 25 26 27 28 29 30 31 April May June Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 1 2 3 4 1 7 8 9 10 11 12 13 5 6 7 8 9 10 11 2 3 4 5 6 7 8 14 15 16 17 18 19 20 12 13 14 15 16 17 18 9 10 11 12 13 14 15 21 22 23 24 25 26 27 19 20 21 22 23 24 25 16 17 18 19 20 21 22 28 29 30 26 27 28 29 30 31 23 24 25 26 27 28 29 30 

Источник

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