Ответ 1
Это может сработать.
$timestamp = strtotime('next Sunday');
$days = array();
for ($i = 0; $i < 7; $i++) {
$days[] = strftime('%A', $timestamp);
$timestamp = strtotime('+1 day', $timestamp);
}
Я знаю, что это глупо, но как мне это сделать? Я хотел бы создать массив из семи дней через 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 = [
'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
Я бы посчитал карту массива более элегантным способом достижения того же результата.
$days = array_map(function ($day) {
return strtolower(date_create('Sunday')->modify("+$day day")->format('l'));},
range(0, 6)
);
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"
}
$now = time();
$days = array();
for ($i = 0; $i < 7; $i++) {
$days[] = strftime('%A', $now);
$now += 60*60*24;
}
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];
}
$days = array();
for ($x = 0; $x < 7; $x++) {
$days[] = date('l', strtotime("+$x days", strtotime('2010-03-28')));
}
Серьезно, хотя, если ваш вопрос не понял, я полностью второй ответ Якоби. используйте 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');
Ссылка 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
}
?>
$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"));
}