Вставить еженедельную информацию из даты и времени php

#php

#php

Вопрос:

У меня есть функция, которая принимает дату и время, а также количество появлений эпизода. Я использую цикл while, чтобы пытаться вставлять и выпускать каждую неделю в один и тот же день и время. Например, если эпизод в понедельник в 7 вечера, я хочу вставить для каждого понедельника в 7 вечера для указанного количества случаев.

Вот мой код и цикл while:

 $sEpsAirDate =  strtotime($aVars['air_date'].' '.$aVars['air_time'].$aVars['air_ampm']);

            $i = 1;
            while ($i <= $aVars['repeat_count']) {

                $sEpsAirDate =  // How can I alter this variable to change the date to every week?                      

                db_res(
                    "INSERT INTO `hm_episodes_main` SET 
                        `show_id` = '{$aVars['show_id']}',
                        `title` = '{$sEpsTitle}.{$i}',
                        `season` = '{$aVars['eps_season']}',
                        `uri` = '{$sUri}.{$i}',
                        `desc` = '{$sEpsDesc}',
                        `air_date` = '{$sEpsAirDate}'
                ");

                $i   
            }
  

Как бы я изменил переменную $ sEpsAirDate, чтобы она вводилась точно в каждый день недели в заданное время?

Ответ №1:

Использовать mktime() :

 $next_ep_timestamp = mktime ($hour,$min,$sec, $first_ep_month, $first_ep_day   7 * $weekcount, $first_ep_year);
  

«Инициализируйте» это, установив соответствующие переменные для даты, месяца и года первого эпизода, затем вы можете создать новые даты для следующих недель, добавив приращения 7 к параметру day в mktime (как показано выше).

Затем форматируйте для вывода в SQL следующим образом:

 $datetime_str = date("Y-m-d H:i:s", $next_ep_timestamp);
//gives a date-str like '2011-10-16 12:59:01'
  

Ответ №2:

Первая идея, которая приходит мне в голову, — это просто добавить секунды за неделю к sEpsAirDate с каждой итерацией в цикле:

 $sEpsAirDate  = 604800;
  

Если вам нужно сохранить дату первого эфира, вы можете скопировать ее в отдельную переменную, а затем сделать что-то вроде этого (измените LCV $ i, чтобы он начинался с 0):

 $sEpsAirDate = $sEpsFirstAirDate (604800*$i);
  

Но этот метод может создать проблемы с переходом на летнее время… поэтому, возможно, было бы безопаснее разбить дату на переменные year, month и day, а затем воссоздать $sEpsAirDate с каждой итерацией цикла, добавив ($ i * 7) в day. … Итак, что-то вроде (снова измените LCV $ i, чтобы начать с 0):

 $sEpsAirDate = mktime($sEpsAirDateHour, $sEpsAirDateMinute, 0, $sEpsAirDateMonth, $sEpsAirDateDay ($i*7), $sEpsAirDateYear);