Я знаю, что это глупо, но как мне это сделать? Я хотел бы создать массив из семи дней через PHP. Я имею в виду все семь рабочих дней. Я не хочу писать их так, как он:
sunday monday tuesday ...etc
и дни будут начинаться с воскресенья, что означает, что если сегодня будет 29 марта (понедельника), тогда он автоматически захватывает текущую дату и создает массив будних дней, начиная с воскресенья.
массив всегда будет таким образом
$weakarray=("sunday","monday",......,"saturday");
Это может сработать.
$timestamp = strtotime('next Sunday'); $days = array(); for ($i = 0; $i < 7; $i++) { $days[] = strftime('%A', $timestamp); $timestamp = strtotime('+1 day', $timestamp); }
Если им всегда нужно начинать с воскресенья, почему вы хотите создать массив динамически? Что не так с этим?
$days = array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', );
Любое другое решение сделает ваш код более сложным для понимания, и в этом случае это динамически кажется излишним.
Немного поздний ответ, изменение принятого в качестве лучшего ответа
<?php $days = array(); for ($i = 0; $i < 7; $i++) { $days[$i] = jddayofweek($i,1); } ?>
Результат:
array(7) { [0]=> "Monday" [1]=> "Tuesday" [2]=> "Wednesday" [3]=> "Thursday" [4]=> "Friday" [5]=> "Saturday" [6]=> "Sunday" }
См. PHP jddayofweek
Пытаться:
for($i=1;$i<8;$i++) $weekdays [] = date("l",mktime(0,0,0,3,28,2009)+$i * (3600*24)); var_dump($weekdays);
Вывод:
C:\>php b.php array(7) { [0]=> string(6) "Sunday" [1]=> string(6) "Monday" [2]=> string(7) "Tuesday" [3]=> string(9) "Wednesday" [4]=> string(8) "Thursday" [5]=> string(6) "Friday" [6]=> string(8) "Saturday" }
Я бы рассмотрел карту массива как более элегантный способ добиться того же результата.
$days = array_map(function ($day) { return strtolower(date_create('Sunday')->modify("+$day day")->format('l'));} range(0, 6) );
function dias_semana($days) { $days=explode(',',$days); $semana=""; foreach ($days as $key=>$day){ $semana.=dia_semana($day)."<br>"; } return $semana; } function dia_semana($dia) { $days = array( 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ); return $days[$dia]; }
$now = time(); $days = array(); for ($i = 0; $i < 7; $i++) { $days[] = strftime('%A', $now); $now += 60*60*24; }
$days = array(); for ($x = 0; $x < 7; $x++) { $days[] = date('l', strtotime("+$x days", strtotime('2010-03-28'))); }
Серьезно, хотя, если ваш вопрос не понял, я полностью отвечу на вопрос Якоби.
использовать объект DateTime
$date = new DateTime(); $weekdays = array(); for($i=0; $i<7; $i++){ $weekdays[] = $date->format('l'); $date->modify('+1 day'); }
Если вы хотите начать с воскресенья, создайте DateTime со воскресным днем (например, вчера):
$date = new DateTime('2010-03-28');
Ссылка TuiTalk ответ здесь, как вы можете его использовать.
Просто выберите, как вы хотите его использовать, есть три варианта использования.
<?php $timestamp = strtotime('next Sunday'); $days = array(); for ($i = 0; $i < 7; $i++) { $days[] = strftime('%A', $timestamp); $timestamp = strtotime('+1 day', $timestamp); echo date("D",$timestamp)."<br>"; //Mon<br>Tue<br>Wed<br>Thu<br>Fri<br>Sat<br>Sun<br> echo date("l",$timestamp)."<br>"; //Monday<br>Tuesday<br>Wednesday<br>Thursday<br>Friday<br>Saturday<br>Sunday<br> echo date("d",$timestamp)."<br>"; //02<br>03<br>04<br>05<br>06<br>07<br>08 } ?>
на<?php $timestamp = strtotime('next Sunday'); $days = array(); for ($i = 0; $i < 7; $i++) { $days[] = strftime('%A', $timestamp); $timestamp = strtotime('+1 day', $timestamp); echo date("D",$timestamp)."<br>"; //Mon<br>Tue<br>Wed<br>Thu<br>Fri<br>Sat<br>Sun<br> echo date("l",$timestamp)."<br>"; //Monday<br>Tuesday<br>Wednesday<br>Thursday<br>Friday<br>Saturday<br>Sunday<br> echo date("d",$timestamp)."<br>"; //02<br>03<br>04<br>05<br>06<br>07<br>08 } ?>
$days = array(); for ($i = 0; $i < 7; $i++) { $days[strftime("%w",strtotime("+$i day"))] = strftime('%A', strtotime("+$i day")); }
в 5.1.0+ PHP вы можете использовать% N, которая устанавливает воскресенье в 7, а не 0
$days = array(); for ($i = 0; $i < 7; $i++) { $days[strftime("%N",strtotime("+$i day"))] = strftime('%A', strtotime("+$i day")); }