Как создать массив имени недели в php

Я знаю, что это глупо, но как мне это сделать? Я хотел бы создать массив из семи дней через PHP Я имею в виду все семь будних дней. Я не хочу писать их так, как он:

sunday monday tuesday ...etc

и дни будут начинаться с воскресенья, что означает, что сегодня это 29 марта (понедельника), затем автоматически захватывает текущую дату и создает массив будних дней, начиная с воскресенья.

массив всегда будет таким образом

 $weakarray=("sunday","monday",......,"saturday");

Ответ 1

Это может сработать.

$timestamp = strtotime('next Sunday');
$days = array();
for ($i = 0; $i < 7; $i++) {
    $days[] = strftime('%A', $timestamp);
    $timestamp = strtotime('+1 day', $timestamp);
}

Ответ 2

Если им всегда нужно начинать с воскресенья, почему вы хотите создать массив динамически? Что не так с этим?

$days = [
    'Sunday',
    'Monday',
    'Tuesday',
    'Wednesday',
    'Thursday',
    'Friday',
    'Saturday'
];

Любое другое решение усложнит понимание вашего кода, и в этом случае его динамическое выполнение представляется излишним.

Ответ 3

Немного поздний ответ, изменение принятого в качестве наилучшего ответа

<?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

Ответ 4

Я бы посчитал карту массива более элегантным способом достижения того же результата.

$days = array_map(function ($day) {
    return strtolower(date_create('Sunday')->modify("+$day day")->format('l'));},
    range(0, 6)
);

Ответ 5

Try:

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"
}

Ответ 6

$now = time();
$days = array();
for ($i = 0; $i < 7; $i++) {
    $days[] = strftime('%A', $now);
    $now += 60*60*24;
}

Ответ 7

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];

}

Ответ 8

$days = array();
for ($x = 0; $x < 7; $x++) {
    $days[] = date('l', strtotime("+$x days", strtotime('2010-03-28')));
}
Серьезно, хотя, если ваш вопрос не понял, я полностью второй ответ Якоби.

Ответ 9

используйте DateTime object

$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');

Ответ 10

Ссылка 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
}

?>

Ответ 11

$days = array();
for ($i = 0; $i < 7; $i++) {
  $days[strftime("%w",strtotime("+$i day"))] = strftime('%A', strtotime("+$i day"));
}

в 5.1.0+ PHP вы можете использовать% N, который устанавливает sunday на 7, а не 0

$days = array();
for ($i = 0; $i < 7; $i++) {
  $days[strftime("%N",strtotime("+$i day"))] = strftime('%A', strtotime("+$i day"));
}