Как я могу использовать PHP, чтобы перечислить все даты за год? - PullRequest
8 голосов
/ 28 октября 2010

Я пытаюсь использовать PHP для создания скрипта, который выполняет поиск по всем дням с настоящего времени до одного года и перечисляет все даты по пятницам и субботам.Я пытался использовать PHP-функции date () и mktime (), но не могу придумать, как это сделать.Возможно ли это?

Спасибо, Бен

Ответы [ 4 ]

9 голосов
/ 28 октября 2010

Вот как это сделать круто, с особой благодарностью strtotime * относительных форматов .

$friday = strtotime('Next Friday', time());
$saturday = strtotime('Next Saturday', time());
$friday = strtotime('+1 Week', $friday);
$saturday = strtotime('+1 Week', $saturday);

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

Также обратите внимание, что strtotime даст вам метки времени.Чтобы узнать дату, используйте:

date('Y-m-d', $friday)

Еще одна вещь, которую нужно знать, это то, что Next <dayofweek> исключит ваш текущий день из поиска, поэтому, если вы также хотите включить текущий день, вы можете сделать это следующим образом.:

$friday = strtotime('Next Friday', strtotime('-1 Day', time()));

И вот полный рабочий скрипт, который делает именно то, что вы хотели.

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

?>

Удачи, Алин

4 голосов
/ 28 октября 2010

С объектами DateTime:

<?php

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

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

Обновление: я добавил часть $date=clone $from, чтобы заметить, что объекты в PHP / 5 больше не копируются с оператором =, а имеют ссылки.

1 голос
/ 14 июня 2014
    $number_of_days_from_now = 365;
    $now = time();

    $arr_days = array();

    $i = 0;
    while($i <> $number_of_days_from_now){
        $str_stamp = "- $i day";
        $arr_days[] = date('Y-m-d',strtotime($str_stamp,$now));
        $i ++;
    }

    var_dump($arr_days);

Я сделал что-то похожее на принятый ответ, который мне не подходил

1 голос
/ 28 октября 2010
$secondsperday=86400;

$firstdayofyear=mktime(12,0,0,1,1,2010);
$lastdayofyear=mktime(12,0,0,12,31,2010);

$theday = $firstdayofyear;

for($theday=$firstdayofyear; $theday<=$lastdayofyear; $theday+=$secondsperday) {
    $dayinfo=getdate($theday);
    if($dayinfo['wday']==5 or $dayinfo['wday']==6) {
        print $dayinfo['weekday'].' '.date('Y-m-d',$theday)."<br />";
    }
}
...