- Функция PHP для получения всех понедельников в диапазоне дат
- 8 ответов
- Понедельник по дате php
- Код вывода дня недели на английском:
- Результат вывод дня недели по-английски:
- Php номер дня недели
- Код вывода номера дня недели.
- Результат вывода номера дня недели.
- Php день недели на русском
- Код получения дня недели на русском php.
- Результат получения и вывода дня недели на русском
- Php день недели произвольной даты на русском
- Get the date of next monday, tuesday, etc
- 10 Answers 10
- Get date for monday and friday for the current week (PHP)
- 9 Answers 9
- Получить дату понедельника на текущей неделе в PHP 4
Функция PHP для получения всех понедельников в диапазоне дат
Пример: $startDate — понедельник 2007-02-05, а $endDate — вторник 2007-02-20. Затем я хочу, чтобы он перечислял:
Monday 2007-02-05 Monday 2007-02-12 Monday 2007-02-19
Я просмотрел руководство по PHP и нашел, что это все дни между двумя датами. Но как это сделать так, как я хочу? Код PHP:
8 ответов
Вместо того, чтобы получать все дни и проходить через них все, получите первый понедельник после даты начала и затем повторите 7 дней за раз:
$endDate = strtotime($endDate); for($i = strtotime('Monday', strtotime($startDate)); $i
Вы должны использовать strtotime ("+ 1 неделя", $ i) вместо добавления магического числа 604800, иначе возникнет проблема с переходом на летнее время.
И последнее: «strtotime ($ endDate)» будет рассчитываться на каждом шаге, лучше ввести новую переменную и поместить ее в первый раздел: for ($ i = . $ n = strtotime (); $ i
Мне нужно было то же самое и создать простой метод.
public function getMondaysInRange($dateFromString, $dateToString) < $dateFrom = new \DateTime($dateFromString); $dateTo = new \DateTime($dateToString); $dates = []; if ($dateFrom >$dateTo) < return $dates; >if (1 != $dateFrom->format('N')) < $dateFrom->modify('next monday'); > while ($dateFrom format('Y-m-d'); $dateFrom->modify('+1 week'); > return $dates; >
$dateFromString = '2007-02-05'; $dateToString = '2007-02-20'; var_dump($this->getMondaysInRange($dateFromString, $dateToString));
array (size=3) 0 => string '2007-02-05' (length=10) 1 => string '2007-02-12' (length=10) 2 => string '2007-02-19' (length=10)
Возможно, это будет полезно для кого-то.
Вы можете использовать функцию ниже, чтобы получить массив дат между диапазоном дат определенного дня.
Вам нужно ввести дату начала, дату окончания и номер дня в номере. Номер дня следующий. 1 = понедельник, 2 = вторник, 3 = среда, 4 = четверг. 5 = пятница, 6 = суббота, 7 = воскресенье.
function getDateForSpecificDayBetweenDates($startDate,$endDate,$day_number)< $endDate = strtotime($endDate); $days=array('1'=>'Monday','2' => 'Tuesday','3' => 'Wednesday','4'=>'Thursday','5' =>'Friday','6' => 'Saturday','7'=>'Sunday'); for($i = strtotime($days[$day_number], strtotime($startDate)); $i
Как я могу преобразовать это, чтобы принять массив номеров дня, например, вернуть понедельник, вторник, среду и т. Д.?
for ($i = strtotime($startDate); $i
i Создайте класс, вы получите все дни в диапазоне Дата группы по имени дня:
class DayHelper< const MONDAY = 'Mon'; const TUESDAY = 'Tue'; const WEDENSDAY = 'Wed'; const THURSDAY = 'Thu'; const FRIDAY = 'Fri'; const SATURDAY = 'Sat'; const SUNDAY = 'Sun'; public function GetYeardays($dateStart, $dateend)< $period = new \DatePeriod( new \DateTime($dateStart), new \DateInterval('P1D'), (new \DateTime($dateend)) ); $dates = iterator_to_array($period); $arrayreturn = array(); foreach ($dates as $val) < $date = $val->format('Y-m-d'); //format date $get_name = date('l', strtotime($date)); //get week day $day_name = substr($get_name, 0, 3); // Trim day name to 3 chars switch ($day_name) < case self::MONDAY: $MONDAY[] = $date; $arrayreturn[self::MONDAY] = $MONDAY; break; case self::TUESDAY: $TUESDAY[] = $date; $arrayreturn[self::TUESDAY] = $TUESDAY; break; case self::WEDENSDAY: $WEDENSDAY[] = $date; $arrayreturn[self::WEDENSDAY] = $WEDENSDAY; break; case self::THURSDAY: $THURSDAY[] = $date; $arrayreturn[self::THURSDAY] = $THURSDAY; break; case self::FRIDAY: $FRIDAY[] = $date; $arrayreturn[self::FRIDAY] = $FRIDAY; break; case self::SATURDAY: $SATURDAY[] = $date; $arrayreturn[self::SATURDAY] = $SATURDAY; break; case self::SUNDAY: $SUNDAY[] = $date; $arrayreturn[self::SUNDAY] = $SUNDAY; break; >> return $arrayreturn; > >
array (size=7) 'Fri' => array (size=5) 0 => string '2016/01/01' (length=10) 1 => string '2016/01/08' (length=10) 2 => string '2016/01/15' (length=10) 3 => string '2016/01/22' (length=10) 4 => string '2016/01/29' (length=10) 'Sat' => array (size=5) 0 => string '2016/01/02' (length=10) 1 => string '2016/01/09' (length=10) 2 => string '2016/01/16' (length=10) 3 => string '2016/01/23' (length=10) 4 => string '2016/01/30' (length=10) 'Sun' => array (size=4) 0 => string '2016/01/03' (length=10) 1 => string '2016/01/10' (length=10) 2 => string '2016/01/17' (length=10) 3 => string '2016/01/24' (length=10) 'Mon' => array (size=4) 0 => string '2016/01/04' (length=10) 1 => string '2016/01/11' (length=10) 2 => string '2016/01/18' (length=10) 3 => string '2016/01/25' (length=10) 'Tue' => array (size=4) 0 => string '2016/01/05' (length=10) 1 => string '2016/01/12' (length=10) 2 => string '2016/01/19' (length=10) 3 => string '2016/01/26' (length=10) 'Wed' => array (size=4) 0 => string '2016/01/06' (length=10) 1 => string '2016/01/13' (length=10) 2 => string '2016/01/20' (length=10) 3 => string '2016/01/27' (length=10) 'Thu' => array (size=4) 0 => string '2016/01/07' (length=10) 1 => string '2016/01/14' (length=10) 2 => string '2016/01/21' (length=10) 3 => string '2016/01/28' (length=10)
Понедельник по дате php
Для того, чтобы получить день недели на английском. вам понадобится:
Из Этой таблицы вам потребуется аргумент(Полное наименование дня недели от Sunday до Saturday):
Код вывода дня недели на английском:
Результат вывод дня недели по-английски:
Код вывода дня недели на английском у вас есть. Теперь давайте выведем его прямо здесь:
Php номер дня недели
Для того, чтобы вывести текущее наименование номера дня недели вам опять понадобится функция date и также таблица аргументов.
Вам потребуется аргумент, который отвечает за порядковый номер недели, это английская буква N:
Код вывода номера дня недели.
Результат вывода номера дня недели.
После того, как мы определились с кодом, который будет получать и выводить порядковый номер недели. роазместим его прямо здесь:
Php день недели на русском
Конечно английское название дни недели в php это хорошо, но как нам показать название недели по-русски!? Встроенного решения в php нет, поэтому, для этого вам понадобится:
Создадим массив, где в каждой ячейке следующего массива располагаем названия дня недели на русском.
$days = array( 1 => "Понедельник" , "Вторник" , "Среда" , "Четверг" , "Пятница" , "Суббота" , "Воскресенье" );
Дала вам понадобятся знания обращения с одномерным массивом и получение соответствующей ячейки массива.
Как вы знаете/не знаете, чтобы получить ячейку массива - например "понедельник". , нужно соорудить вот такую конструкцию:
Но если мы вместо цифры внутри квадратных скобок поместим функцию с аргументом., то получим нужный нам результат:
Код получения дня недели на русском php.
Результат получения и вывода дня недели на русском
Что дальше? Располагаем выше приведенный код получения дня недели на русском через php прямо здесь:
Php день недели произвольной даты на русском
Для того, чтобы получить день недели произвольной даты, как вариант, что пришло первое в голову.
Нам нужна временная метка даты, я рассказывал о том, как превращать дату(пусть это будет 2019-02-05 11:38) в метку времени(получили - 1549355880) здесь
Далее нам нужна опять та же функция date , устанавливаем функции аргумент w :
w -> Порядковый номер дня недели -> От 0 (воскресенье) до 6 (суббота) (см. все аргументы)
Get the date of next monday, tuesday, etc
I would like to find the date stamp of monday, tuesday, wednesday, etc. If that day hasn't come this week yet, I would like the date to be this week, else, next week. Thanks!
10 Answers 10
You could probably find out if you have gone past that day by looking at the week number:
$nextTuesday = strtotime('next tuesday'); $weekNo = date('W'); $weekNoNextTuesday = date('W', $nextTuesday); if ($weekNoNextTuesday != $weekNo) < //past tuesday >
Thanks! This helps a lot. I just have to find out how to find out if monday has already come. That won't be too hard! Thanks!
I know it's a bit of a late answer but I would like to add my answer for future references.
// Create a new DateTime object $date = new DateTime(); // Modify the date it contains $date->modify('next monday'); // Output echo $date->format('Y-m-d');
The nice thing is that you can also do this with dates other than today:
// Create a new DateTime object $date = new DateTime('2006-05-20'); // Modify the date it contains $date->modify('next monday'); // Output echo $date->format('Y-m-d');
$monday = new DateTime('monday'); // clone start date $endDate = clone $monday; // Add 7 days to start date $endDate->modify('+7 days'); // Increase with an interval of one day $dateInterval = new DateInterval('P1D'); $dateRange = new DatePeriod($monday, $dateInterval, $endDate); foreach ($dateRange as $day) < echo $day->format('Y-m-d')."
"; >
Get date for monday and friday for the current week (PHP)
How can I get the date for monday and friday for the current week? I have the following code, but it fails if current day is sunday or saturday.
$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"));
9 Answers 9
$monday = date( 'Y-m-d', strtotime( 'monday this week' ) ); $friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
This is much better than the accepted answer. There is no difference between "this friday" and "next friday". You have to use "friday this week" and "friday next week"
What does "this week" mean? A week starting on monday or week starting sunday? You cannot tell because it depends on PHP version. See 3v4l.org/v1ZI7 and click EOL versions. Some 7.x versions produce unexpected results.
These strtotime inputs work very well:
strtotime( "next monday" ); strtotime( "previous monday" ); strtotime( "today" ); strtotime( "next friday" ); strtotime( "previous friday" );
All you need to do is to wrap the logic inside some if statements.
@chhameed: strtotime("next monday", strtotime("2012-01-01")) . Second parameter, if specified, is used as reference date.
@kelly the user is supposed to check today's day-of-week and use prev OR next monday depending on the result. When I posted this answer, strtotime's week handling was horribly broken. Also AFAIK, PHP does not let you specify first day of week. and nobody knew what PHP considered start of week.
This question needs a DateTime answer:-
/** * @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')));
This really depends on how you define a week but I came up with this function that will give you the date for the nearest "monday" or "friday" (or any day for that matter):
Input: a day of the week ("sunday", "Monday", etc.)
Output: If I asked for the nearest "sunday" and today is:
- "Sunday": I will get today's date
- "Monday": I will get yesterday's date
- "Saturday: I will get tomorrow's date
As the top answer suggests, using PHP's strtotime() function is the easiest way.
However, instead of using if statements as he suggests, you could simply reset back to the previous Sunday and grab the dates you require from there.
$monday = strtotime('next monday', strtotime('previous sunday')); $friday = strtotime('next friday', strtotime('previous sunday'));
I needed a definition of the current week per ISO 8601. I want Monday to always be defined as the Monday that started this current week.
The following solution works excellent for me:
$monday = strtotime(date('o-\WW')); $friday = strtotime("next friday",$monday);
For $monday , this method will always return the Monday that started this calendar week. unfortunately, this method relies on PHP 5.1 to parse the o date format.
To get any day of the week, you could try:
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"; ?>