Как я могу использовать PHP, чтобы переписать все даты в год?
Вопрос
Я пытаюсь использовать PHP, чтобы создать скрипт, который ищет все дни между сейчас и однолетним временем и перечисляет все даты по пятницам и субботам. Я пытался использовать функции PHP Date () и MKTime (), но не могут думать о способе этого. Является ли это возможным?
Спасибо, Бен
Решение
Вот как это сделать прохладно, с особой благодаря 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);
?>
Удачи, алина
Другие советы
С объектами 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 больше не скопированы с =
Оператор, но на ссылке.
$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 />";
}
}
$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);
Я сделал что-то похожее на принятый ответ, который не подходит для меня