Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以PHP5中的数组形式返回当前日历周的日期_Php_Date_Calendar - Fatal编程技术网

以PHP5中的数组形式返回当前日历周的日期

以PHP5中的数组形式返回当前日历周的日期,php,date,calendar,Php,Date,Calendar,我如何组合一个PHP5函数,从周一开始查找当前日历周并以数组形式返回一周中每天的日期?例如,如果函数在今天2010年2月25日(星期四)运行,该函数将返回如下数组: [0] => Mon Feb 22 2010<br /> [1] => Tue Feb 23 2010<br /> [2] => Wed Feb 24 2010<br /> [3] => Thu Feb 25 2010<br /> [4] => Fri F

我如何组合一个PHP5函数,从周一开始查找当前日历周并以数组形式返回一周中每天的日期?例如,如果函数在今天2010年2月25日(星期四)运行,该函数将返回如下数组:

[0] => Mon Feb 22 2010<br />
[1] => Tue Feb 23 2010<br />
[2] => Wed Feb 24 2010<br />
[3] => Thu Feb 25 2010<br />
[4] => Fri Feb 26 2010<br />
[5] => Sat Feb 27 2010<br />
[6] => Sun Feb 28 2010<br />
在数组中存储日期的格式并不重要,因为我认为这很容易更改。另外,还可以选择提供一个日期作为参数,并获取该日期的日历周,而不是当前日期


谢谢

我想一个解决方案是首先使用以下方法获取与上周一相对应的时间戳:

但是如果你尝试今天周四,用这样的东西:

$timestampFirstDay = strtotime('last thursday');
var_dump(date('Y-m-d', $timestampFirstDay));
$currentDay = $timestampFirstDay;
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $currentDay) . '<br />';
    $currentDay += 24 * 3600;
}
您将获得:

string '2010-02-18' (length=10)
i、 上周。。。最后一次是指今天之前的那一次

这意味着您必须测试strotime返回的今天是否是最后一个星期一加上一周-如果是,则加上一周

下面是一个可能有更聪明想法的解决方案:

$timestampFirstDay = strtotime('last monday');
if (date('Y-m-d', $timestampFirstDay) == date('Y-m-d', time() - 7*24*3600)) {
    // we are that day... => add one week
    $timestampFirstDay += 7 * 24 * 3600;
}
现在我们有了上周一的时间戳,我们可以编写一个简单的for循环,循环7次,每次增加1天,如下所示:

$timestampFirstDay = strtotime('last thursday');
var_dump(date('Y-m-d', $timestampFirstDay));
$currentDay = $timestampFirstDay;
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $currentDay) . '<br />';
    $currentDay += 24 * 3600;
}
现在,由您决定:

修改for循环,使其将日期存储在数组中 决定要用于函数的格式
玩得开心-

我想一个解决方案是首先使用以下方法获取与上周一相对应的时间戳:

但是如果你尝试今天周四,用这样的东西:

$timestampFirstDay = strtotime('last thursday');
var_dump(date('Y-m-d', $timestampFirstDay));
$currentDay = $timestampFirstDay;
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $currentDay) . '<br />';
    $currentDay += 24 * 3600;
}
您将获得:

string '2010-02-18' (length=10)
i、 上周。。。最后一次是指今天之前的那一次

这意味着您必须测试strotime返回的今天是否是最后一个星期一加上一周-如果是,则加上一周

下面是一个可能有更聪明想法的解决方案:

$timestampFirstDay = strtotime('last monday');
if (date('Y-m-d', $timestampFirstDay) == date('Y-m-d', time() - 7*24*3600)) {
    // we are that day... => add one week
    $timestampFirstDay += 7 * 24 * 3600;
}
现在我们有了上周一的时间戳,我们可以编写一个简单的for循环,循环7次,每次增加1天,如下所示:

$timestampFirstDay = strtotime('last thursday');
var_dump(date('Y-m-d', $timestampFirstDay));
$currentDay = $timestampFirstDay;
for ($i = 0 ; $i < 7 ; $i++) {
    echo date('Y-m-d', $currentDay) . '<br />';
    $currentDay += 24 * 3600;
}
现在,由您决定:

修改for循环,使其将日期存储在数组中 决定要用于函数的格式
玩得开心-

承租人。首先,为了避免任何时区问题,我会把时间定在你想要比较的那天的中午,这样一个小时都不会造成任何问题

$dateCompare = time(); // replace with a parameter
$dateCompare = mktime(12, 0, 0, date('n', $dateCompare), 
      date('j', $dateCompare), date('Y', $dateCompare));
然后找出你约会的星期几

$dow = date('N', $dateCompare);
1是星期一,所以计算一下我们离星期一还有多少天

$days = $dow - 1;
现在减去几天的秒数,直到你回到周一

$dateCompare -= (3600 * 24 * $days);
现在集合你的天数数组

$output = array();
for ($x = 0; $x < 7; $x++) {
    $output[$x] = $dateCompare + ($x * 24 * 3600);
}

这是一个时间戳数组,但如果愿意,可以将日期存储为字符串。

。首先,为了避免任何时区问题,我会把时间定在你想要比较的那天的中午,这样一个小时都不会造成任何问题

$dateCompare = time(); // replace with a parameter
$dateCompare = mktime(12, 0, 0, date('n', $dateCompare), 
      date('j', $dateCompare), date('Y', $dateCompare));
然后找出你约会的星期几

$dow = date('N', $dateCompare);
1是星期一,所以计算一下我们离星期一还有多少天

$days = $dow - 1;
现在减去几天的秒数,直到你回到周一

$dateCompare -= (3600 * 24 * $days);
现在集合你的天数数组

$output = array();
for ($x = 0; $x < 7; $x++) {
    $output[$x] = $dateCompare + ($x * 24 * 3600);
}

这是一个时间戳数组,但如果愿意,您可以将日期存储为字符串。

请注意,此方法不适用于时钟更改,例如一周的时间可能大于或小于7*24*3600秒。请注意,此方法不适用于时钟更改,例如一周的时间可能大于或小于7*24*3600秒。