- Получить дату для понедельника и пятницы для текущей недели (PHP)
- 8 ответов
- Получить дату понедельника на текущей неделе в PHP 4
- Операции с датами и временем Unixtime в PHP
- Получение временных меток и дат
- Число дня недели
- Числа месяца
- Текущий месяц:
- Преведущий месяц:
- Следующий месяц:
- Число дней в текущем месяце
- Порядковый номер недели
- Число дней в текущем году
- Текущий квартал
- Арифметические операции
- Прибавить к дате 10 секунд
- Прибавить к дате 10 минут
- Прибавить к дате 1 час
- Прибавить к дате 1 день
- Прибавить к дате неделю
- Прибавить к дате месяц
- Прибавить к дате год
- Сколько прошло
- Сколько прошло c 8:00
- Сколько прошло c понедельника этой недели
- Сколько прошло c начала года
- Сколько прошло c определённой даты
- Сколько остается
- Сколько остается до 23:00
- Сколько остается до конца недели
- Сколько остается до конца месяца
- Сколько остается до конца года
- Сколько остается до определенной даты
- Время между датами
- Количество часов между датами
- Количество дней между датами
- Количество месяцев между датами
- Комментарии 2
- Другие публикации
Получить дату для понедельника и пятницы для текущей недели (PHP)
Как я могу получить дату понедельника и пятницы на текущую неделю? У меня есть следующий код, но он не работает, если текущий день — воскресенье или суббота.
$current_day = date("N"); $days_to_friday = 5 - $current_day; $days_from_monday = $current_day - 1; $monday = date("Y-m-d", strtotime("- Days")); $friday = date("Y-m-d", strtotime("+ Days"));
8 ответов
Эти входы strtotime работают очень хорошо:
strtotime( "next monday" ); strtotime( "previous monday" ); strtotime( "today" ); strtotime( "next friday" ); strtotime( "previous friday" );
Все, что вам нужно сделать, это обернуть логику внутри некоторых операторов if.
@chhameed: strtotime(«next monday», strtotime(«2012-01-01»)) . Второй параметр, если указан, используется в качестве контрольной даты.
$monday = date( 'Y-m-d', strtotime( 'monday this week' ) ); $friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
Это намного лучше, чем принятый ответ. Нет никакой разницы между «этой пятницей» и «следующей пятницей». Вы должны использовать «Пятница на этой неделе» и «Пятница на следующей неделе»
Этот вопрос нуждается в ответе DateTime: —
/** * @param String $day * @return DateTime */ function getDay($day) < $days = ['Monday' =>1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Sunday' => 7]; $today = new \DateTime(); $today->setISODate((int)$today->format('o'), (int)$today->format('W'), $days[ucfirst($day)]); return $today; >
var_dump(getDay('Monday')->format('l dS F Y')); var_dump(getDay('Friday')->format('l dS F Y'));
string 'Monday 30th September 2013' (length=26) string 'Friday 04th October 2013' (length=24)
Это зависит от того, как вы определяете неделю, но я придумал эту функцию, которая даст вам дату ближайшего «понедельника» или «пятницы» (или любого дня, если на то пошло)
Вход: день недели ( «воскресенье», «понедельник» и т.д.)
Выход: если я попрошу ближайшего «воскресенья» и сегодня:
- «Воскресенье»: сегодня я получу дату.
- «Понедельник»: я получу вчера дату.
- «Суббота: я получу дату завтра.
$first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday'))); $last_week_date = date('d F Y', strtotime('next Monday -1 week + 4 days', strtotime('this sunday')));
Я искал аналогичную вещь, за исключением того, что я хотел любой понедельник, а не только на этой неделе. Вот что я придумал:
function getSunday(DateTime $date)< $outdate = clone($date); $day = $date->format("w"); // get the weekday (sunday is 0) $outdate->sub(new DateInterval("P".$day."D")); // subtracting the weekday from the date always gives Sunday return $outdate; >
Он принимает произвольную дату и дает воскресенье. Затем вы можете легко добавить дни назад, чтобы получить с понедельника по субботу.
Как показывает верхний ответ, использование PHP strtotime() — это самый простой способ.
Однако вместо использования инструкций if, как он предлагает, вы могли бы просто reset вернуться к предыдущему воскресенью и получить нужные вам даты.
$monday = strtotime('next monday', strtotime('previous sunday')); $friday = strtotime('next friday', strtotime('previous sunday'));
Мне нужно определение текущей недели по ISO 8601. Я хочу, чтобы понедельник всегда определялся как понедельник, начавшая эту текущую неделю.
Следующее решение отлично работает для меня:
$monday = strtotime(date('o-\WW')); $friday = strtotime("next friday",$monday);
Для $monday этот метод всегда будет возвращать понедельник, который запустил эту календарную неделю. К сожалению, этот метод использует PHP 5.1 для анализа формата даты o .
Чтобы получить любой день недели, вы можете попробовать:
function time_for_week_day($day_name, $ref_time=null)
time_for_week_day('wednesday'); time_for_week_day('friday',strtotime('2014-12-25'));
Получить дату понедельника на текущей неделе в PHP 4
Мне нужно найти дату понедельника на текущей неделе. Как я могу это сделать в PHP 4?
$time = strtotime('monday this week');
return strtotime('last monday', strtotime('next sunday'));
echo date('Ym-d',time()+( 1 - date('w'))*24*3600);
echo date('Ym-d',time()+( 8 - date('w'))*24*3600);
1 в понедельник, 2 вторник, 3 среды и так далее. Попробуй.
echo date('Ym-d', strtotime('previous monday'));
Но только одно примечание. Вы хотите убедиться, что сегодня не понедельник, иначе вы получите дату предыдущего понедельника, точно так же, как говорится. Вы можете сделать это следующим образом
$thisMonday = date(‘l, F d, Y’, time() — ((date(‘w’)-1) * 86400) );
- date(‘w’) – это числовое представление дня недели (0 = воскресенье, 6 = суббота)
- есть 86400 секунд в день
- мы берем текущее время и вычитаем (один день * (день недели – 1))
Итак, если в настоящее время среда (день 3), понедельник – два дня назад:
time() — (86400 * (3 — 1)) = time() — 86400 * 2
Если в понедельник (1 день), мы получаем:
time() — (86400 * (1 — 1)) = time() — 86400 * 0 = time()
Если это воскресенье (день 0), понедельник – завтра.
time() — (86400 * (0 — 1)) = time() — -86400 = time() + 86400
echo date('Ym-d', strtotime('last monday', strtotime('next monday')));
Он вернет текущую дату, если сегодня понедельник, и в противном случае вернется в последний понедельник. По крайней мере, это делается на моем PHP 5.2.4 под en_US locale.
$day_of_week = date("N") - 1; $monday_time = strtotime("-$day_of_week days");
echo "Monday this week : ", date("Ymd",time() - $weekday * 86400) , "\n"; ?>
Операции с датами и временем 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() или просто работать с секундами:
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); // 28.07.2023 15:35:16 /* или */ $time = strtotime('+10 seconds', time()); echo date('d.m.Y H:i:s', $time); // 28.07.2023 15:35:16
Прибавить к дате 10 минут
$time = time() + 600; echo date('d.m.Y H:i:s', $time); // 28.07.2023 15:45:06 /* или */ $time = strtotime('+10 minutes', time()); echo date('d.m.Y H:i:s', $time); // 28.07.2023 15:45:06
Прибавить к дате 1 час
$time = time() + 3600; echo date('d.m.Y H:i:s', $time); // 28.07.2023 16:35:06 /* или */ $time = strtotime('+1 hours', time()); echo date('d.m.Y H:i:s', $time); // 28.07.2023 16:35:06
Прибавить к дате 1 день
$time = time() + 86400; echo date('d.m.Y H:i:s', $time); // 29.07.2023 15:35:07 /* или */ $time = strtotime('+1 days', time()); echo date('d.m.Y H:i:s', $time); // 29.07.2023 15:35:07
Прибавить к дате неделю
$time = strtotime('+1 week', time()); echo date('d.m.Y H:i:s', $time); // 04.08.2023 15:35:07
Прибавить к дате месяц
$time = strtotime('+1 month', time()); echo date('d.m.Y H:i:s', $time); // 28.08.2023 15:35:07
Прибавить к дате год
$time = strtotime('+1 year', time()); echo date('d.m.Y H:i:s', $time); // 28.07.2024 15:35:07
Сколько прошло
Сколько прошло c 8:00
$date = date('d.m.Y 08:00'); $diff = time() - strtotime($date); echo round($diff / 3600, 1); // 7,6 часов
Сколько прошло c понедельника этой недели
$time = strtotime('monday'); $diff = time() - $time; echo round($diff / 3600); // 112 часов echo round($diff / 86400, 1); // 4,6 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько прошло c начала года
$date = date('01.01.Y 00:00:00'); $diff = time() - strtotime($date); echo intval($diff / 86400); // 208 дней // или echo date('z'); // 208
Сколько прошло c определённой даты
$date = '10.08.2016'; $diff = time() - strtotime($date); echo round($diff / 3600); // 61048 часов echo round($diff / 86400); // 2544 дней
Сколько остается
Сколько остается до 23:00
$time = strtotime(date('d.m.Y 23:00')); $diff = $time - time(); echo round($diff / 3600, 1); // 7,4 часов
Сколько остается до конца недели
$date = strtotime('next sunday, 23:59'); $diff = $date - time(); echo round($diff / 3600); // 56 часов echo round($diff / 86400); // 2 дней
*Дни недели: monday, tuesday, wednesday, thursday, friday, saturday, sunday.
Сколько остается до конца месяца
$time = strtotime(date('Y-m-t 23:59')); $diff = $time - time(); echo round($diff / 3600); // 80 часов echo round($diff / 86400); // 3 дней
Сколько остается до конца года
$time = strtotime(date('Y-12-31 23:59')); $diff = $time - time(); echo round($diff / 3600); // 3752 часов echo round($diff / 86400); // 156 дней
Сколько остается до определенной даты
$date = '10.08.2025'; $diff = strtotime($date) - time(); echo round($diff / 3600); // 17840 часов echo round($diff / 86400); // 743 дней
Время между датами
Количество часов между датами
$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-страниц и облегчить работу поисковым роботам.