如何在php中创建一个星期名称的数组

时间:2010-03-29 09:00:41

标签: php

我知道这是愚蠢的,但我该怎么做? 我想通过PHP创建一个七天的数组 我的意思是七个工作日。 我不想像他一样写出来:

sunday monday tuesday ...etc

天将从星期日开始,这意味着如果今天是3月29日(星期一)那么它会自动抓取当前日期并从星期日开始创建一个工作日数组。

数组总是以这种方式

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

11 个答案:

答案 0 :(得分:48)

这可能有用......

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

答案 1 :(得分:41)

如果他们总是需要从星期日开始,为什么要动态创建数组呢?这样做有什么问题?

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

任何其他解决方案都会让您的代码更难理解,在这种情况下,动态执行它似乎有点矫枉过正。

答案 2 :(得分:7)

稍晚的回答,修改被接受的最佳答案

SSLSocketFactory

结果:

<?php
    $days = array();
    for ($i = 0; $i < 7; $i++) {
        $days[$i] = jddayofweek($i,1);
    }
?>

请参阅PHP的jddayofweek

答案 3 :(得分:3)

我会认为数组映射是更优雅的方式来实现相同的结果。

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

答案 4 :(得分:2)

尝试:

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

答案 5 :(得分:1)

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

答案 6 :(得分:1)

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

}

答案 7 :(得分:0)

$days = array();
for ($x = 0; $x < 7; $x++) {
    $days[] = date('l', strtotime("+$x days", strtotime('2010-03-28')));
}

说真的,除非你的问题被误解,否则我完全回答Yacoby的回答。

答案 8 :(得分:0)

使用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');

答案 9 :(得分:0)

参考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
}

?>

答案 10 :(得分:-1)

$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"));
}