php - совпадение дня недели по дате () / времени () - PullRequest
1 голос
/ 23 апреля 2011

Я пытаюсь перепланировать повторяющиеся события на основе повторяющегося метода: ежедневно, еженедельно или ежемесячно.

Итак, если у меня есть эти данные:

  $now = time();
  $start_date = '01/01/2011 14:00';
  $end_date = '01/01/2011 14:20';
  $start_time = date('H:i', $start_date);
  $end_time = date('H:i', $end_date);
  $period = $end_date - $start_date; // in this case, 20 minutes

Это событие перенесено ежедневноbe:

  $new_time_start = strtotime(date("m/d/Y {$start_time}", $now));
  $new_time_end = $new_time_start + $period;

И ежемесячно:

  $start_day = date('d', $start_date);
  $new_time_start = strtotime(date("m/{$start_day}/Y {$start_time}", $now));
  $new_time_end = $new_time_start + $period;

Кажется, это работает, но я не знаю, как сделать то же самое для еженедельных событий: (* ​​1012 *

Например, «01.01.2011» - суббота, поэтому я хочу перенести мероприятие на каждую субботу (6-й день недели в соответствии с PHP).

Есть идеи?

Ответы [ 2 ]

1 голос
/ 23 апреля 2011

Дайте это попробовать ...

$today = date('w');
$day = date('w', $start_date);
$diff = abs(7 - ($today - $day));
$new_time_start = strtotime('+'.$diff.'days', strtotime(date("m/d/Y {$start_time}")));
$new_time_end = $new_time_start + ($end_date - $start_date);

Кажется, что вам не хватает некоторых оболочек strtotime () для ваших значений $ start_date и $ end_date. Я предполагаю, что вы сохранили свои переменные даты начала и окончания как метки времени Unix, поэтому я не включил их в свой код.

Также, как примечание, вам не нужно вводить time () в date () в качестве второго аргумента. Если значение времени отсутствует, оно будет использовать текущее время. Таким образом, вы можете удалить все свои экземпляры $ now, и они все равно будут работать.

1 голос
/ 23 апреля 2011

Я не совсем уверен, что понимаю ваш вопрос, но разве вы не можете это сделать?

$time       = '2011-01-31';
$weekLater  = date('Y-m-d', strtotime('+7 days ' . $time));
echo $time . ' -> ' . $weekLater;  

Output : 2011-01-31 -> 2011-02-07

Независимо от того, какую дату вы дадите, она даст вам дату 7 дней в будущем.Это то, что тебе надо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...