2013-07-08 7 views
1

Хороший день,повторяющиеся функции даты в PHP

Я пытаюсь создать повторяющуюся систему дат, которая имеет следующее:

энный день п-й месяц (2-й день каждого 3-го месяца)

$this_months_friday = strtotime('+3 days +4 months'); 

Результат этого будет всегда днем ​​+ 3 дня 4-го месяца.

как его получить, чтобы отобразить n-й день n-го месяца?

поскольку я также попытался

$this_months_friday = strtotime('every 3 days +4 months'); 

и не возвращает никакого результата. Должен ли я придерживаться strtotime на этом или перейти к функции DateTime php. хотя я еще не смогу сформулировать правильный аргумент для такой последовательности дат.

Любая помощь была бы принята с благодарностью.

Thank you.

ответ

1

Вероятно, лучше использовать DateTime с парой интервалов:

$d = new DateTime(); 
$d->add(new DateInterVal('P' . $days . 'D'))->add('new DateInterVal('P' . $months . 'M')); 

не уверен, что ты два примера интервалы желания.

Вы хотите, чтобы интервал начинался через 4 месяца, который затем повторяется каждые 3 дня?

Это было бы что-то больше похоже на

$d = new DateTime(); 
$d->add(new DateInterval('P4M')); // jump ahead 4 months immediately 
$day3 = new DateInterval('P3D'); 

for ($i = 0; $i < 100; $i++) { 
    $d->add($day3); // jump ahead 3 days 
    ... do something with this new date 
} 

для основного повторяющегося события, +4 месяцев + 3 дня, вы просто один интервал:

$interval = new DateInteval('P4M3D'); // +4 months +3 days 
$date = new DateTime(); 
while($some_condition) { 
    $date->add($interval); 
    do_something(); 
} 
+0

no больше похоже на каждый 4-й день 4-го месяца, я делал +3 дня +4 месяца на основании некоторого чтения, где +3 означало, что это будет на 3-й день, и +4 месяца, поскольку он всегда будет повторяться каждые 4 месяца. – magicianiam

+1

нет. strtotime будет интерпретировать «+3 дня» через 3 дня. то же самое с +4 месяцами. например сегодня +3 дня +4 месяца сделают это 12 ноября.вам, вероятно, придется укусить пулю и сделать математику на дату. например вычислить +4 месяца (ноябрь), а затем перестроить новую строку даты '2013- $ M-03', чтобы получить 3-й. Английский разбор strtotime удивляет иногда, но это ** НЕ ** экстрасенс. и ENTIRELY слишком ошибочна. –

+0

О, я вижу, как я могу это сделать, чтобы интерпретировать его как повторяющееся событие? на самом деле я думал об изменении значения каждый раз, когда приходит дата. но я надеялся найти более простую функцию для этого, хотя php – magicianiam

0

Вы можете сделать это путем сохранения значений переменных так:

$day=3; 
    $month=4; 
    echo date("d-m-y",strtotime('+'.$day .'days' .'+'.$month.'months')); 

Пояснение:

(июль) + 4 месяца = месяц (ноябрь)

8 июля + 3 дней = 11 июля

Выход: 11-11- 13

ПРИМЕЧАНИЕ: только для примера Я поставил значения жестко закодированные, вы можете сделать их динамическими.

Смежные вопросы