如何使用PHP列出一年中的所有日期?

Ben*_*Ben 8 php date mktime

我正在尝试使用PHP创建一个脚本,搜索从现在到一年的所有日期,并列出星期五和星期六的所有日期.我试图使用PHP的date()和mktime()函数,但无法想到这样做的方法.可能吗?

谢谢,本

Ali*_*aru 9

以下是如何以一种很酷的方式做到这一点,特别感谢它strtotime相对格式.

$friday = strtotime('Next Friday', time());
$saturday = strtotime('Next Saturday', time());
$friday = strtotime('+1 Week', $friday);
$saturday = strtotime('+1 Week', $saturday);
Run Code Online (Sandbox Code Playgroud)

当然你应该调整它以完全按照自己的意愿行事,但这与我试图做的不同.

另请注意,它strtotime会为您提供时间戳.要找出日期使用:

date('Y-m-d', $friday)
Run Code Online (Sandbox Code Playgroud)

另一件需要知道的是,Next <dayofweek>将您的当前日期从搜索中排除,因此如果您还想要包含当天,您可以这样做:

$friday = strtotime('Next Friday', strtotime('-1 Day', time()));
Run Code Online (Sandbox Code Playgroud)

这是一个完整的工作脚本,完全符合您的要求.

<?php
// prevent multiple calls by retrieving time once //
$now = time();
$aYearLater = strtotime('+1 Year', $now);

// fill this with dates //
$allDates = Array();

// init with next friday and saturday //
$friday = strtotime('Next Friday', strtotime('-1 Day', $now));
$saturday = strtotime('Next Saturday', strtotime('-1 Day', $now));

// keep adding days untill a year has passed //
while(1){
    if($friday > $aYearLater)
        break 1;
    $allDates[] = date('Y-m-d', $friday);
    if($saturday > $aYearLater)
        break 1;
    $allDates[] = date('Y-m-d', $saturday);

    $friday = strtotime('+1 Week', $friday);
    $saturday = strtotime('+1 Week', $saturday);
}

//XXX: debug
var_dump($allDates);

?>
Run Code Online (Sandbox Code Playgroud)

祝你好运,艾琳


Álv*_*lez 5

对于DateTime 对象

define('FRIDAY', 5);
define('SATURDAY', 6);

$from = new DateTimeImmutable();
$to = new DateTimeImmutable('+1 year');

for ($date = $from; $date < $to; $date->modify('+1 day')) {
    switch ($date->format('w')) {
        case FRIDAY:
        case SATURDAY:
            echo $date->format('r') . PHP_EOL;
    }
}
Run Code Online (Sandbox Code Playgroud)

在 PHP/5.5.0 之前,您必须使用常规DateTime类并克隆它:

$from = new DateTime();
$to = new DateTime('+1 year');

for ($date = clone $from; $date < $to; $date->modify('+1 day')) {
    switch ($date->format('w')) {
        case FRIDAY:
        case SATURDAY:
            echo $date->format('r') . PHP_EOL;
    }
}
Run Code Online (Sandbox Code Playgroud)