Я пытаюсь объединить даты в число недели и год, а затем я хочу преобразовать этот номер недели в временную метку unix. Как я могу это сделать?
Я предполагаю, что вы используете идентификационные номера ISO 8601, и хотите, чтобы первый день недели ISO 8601, чтобы, например, Week 1 of 2011
вернулась January 3 2011
.
strtotime
может сделать это из коробки, используя формат {YYYY}W{WW}
:
echo date("Ymd", strtotime("2011W01")); // 2011-01-03
Обратите внимание, что номер недели должен быть двухзначным.
DateTime::createFromFormat
, DateTime::createFromFormat
, новый способ PHP 5, связанный с датами, кажется неспособным разбирать такую информацию – у нее нет «недельного» заполнителя.
$week
: номер недели $year
: номер года Затем:
$timestamp = gmmktime (0, 0 , 0 , 1, , 4 + 7*($week - 1), $year);
4 + 7*($week - 1)
исходит из того, что в соответствии с ISO 8601 первая неделя года является той, которая содержит 4 января.
strtotime('1/1/2011 + 4 weeks')
(1/1 ist всегда в неделю номер один, это приведет меня к пятой неделе). если вам нужна какая-то метка на неделе, тогда это все, что вам нужно, иначе вам нужно будет отправиться в понедельник на этой неделе:
$t = strtotime('1/1/2011 + 4 weeks'); $t -= 24 * 60 * 60 * date('w', $t);
Обновление : вместо 1/1/2011
используйте первый понедельник в 2011 году. Второй расчет больше не нужен.