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