Я новичок в PHP и не знаю, возможен ли мой запрос:
Мне нужно получить массив с днями текущей недели, а также указать для каждого дня, является ли это первое, второе, третье, четвертое или пятое вхождение этой даты в месяце.
Примеры
За 1-ю неделю августа 2016 года это будет:
monday1
tuesday1
wednesday1
thursday1
friday1
saturday1
sunday1
Но для последней недели августа 2016 года (которая начинается в августе и заканчивается в сентябре) это будет:
monday5
tuesday5
wednesday1
thursday1
friday1
saturday1
sunday1
Я пробовал это, но это работает только на текущий день.
$week_of_the_month = ceil(date('d', $time)/7);
$jd = cal_to_jd(CAL_GREGORIAN,date("m"),date("d"),date("Y"));
echo jddayofweek($jd,1).$week_of_the_month;
$d = new DateTime();
$days = [];
for ($i = 0; $i < 7; $i++) {
$date = $d->format('j');
$days[$date] = $d->format('l - ') . ceil($date/7);
$d->add(new DateInterval('P1D'));
}
Это будет работать для текущей даты, но вы можете протестировать ее на неделях, которые пересекают два месяца, установив конкретную дату для работы:
$d = new DateTime('2016-08-31');
Результат выглядит следующим образом:
print_r($days);
Array
(
[31] => Wednesday - 5
[1] => Thursday - 1
[2] => Friday - 1
[3] => Saturday - 1
[4] => Sunday - 1
[5] => Monday - 1
[6] => Tuesday - 1
)
Если вы хотите, чтобы даты всегда начинались в понедельник текущей недели, DateTime
Конструктор позволяет передать строку как таковую:
$d = new DateTime('monday this week');
Сегодня четверг, но это дает:
Array
(
[1] => Monday - 1
[2] => Tuesday - 1
[3] => Wednesday - 1
[4] => Thursday - 1
[5] => Friday - 1
[6] => Saturday - 1
[7] => Sunday - 1
)
Смена языка
Если вы хотите изменить язык вывода даты, это отдельная тема (посмотреть здесь). Вам нужно будет установить локали / расширения в вашей системе. Если вы не хотите идти по этому пути, вы можете просто сопоставить дни на своем языке:
$intlDays = [
'Monday' => 'Lundi',
'Tuesday' => 'Mardi',
'Wednesday' => 'Mercredi',
'Thursday' => 'Jeudi',
'Friday' => 'Vendredi',
'Saturday' => 'Samedi',
'Sunday' => 'Dimanche'
];
$d = new DateTime('monday this week');
$days = [];
for ($i = 0; $i < 7; $i++) {
$date = $d->format('j');
$output = $d->format('l - ') . ceil($date/7);
$output = str_replace(array_keys($intlDays), $intlDays, $output);
$days[$date] = $output;
$d->add(new DateInterval('P1D'));
}
Других решений пока нет …