Как преобразовать номер недели и год в метку времени Unix? - PullRequest
30 голосов
/ 23 апреля 2011

Я пытаюсь сгруппировать даты в номер недели и год, а затем хочу преобразовать номер этой недели обратно в метку времени Unix.Как я могу сделать это?

Ответы [ 3 ]

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

Я предполагаю, что вы используете номера недель ISO 8601 и хотите первый день недели ISO 8601, чтобы, например, Week 1 of 2011 вернул January 3 2011.

strtotime может сделать это из коробки, используя формат {YYYY}W{WW}:

echo date("Y-m-d", strtotime("2011W01")); // 2011-01-03

Обратите внимание, что номер недели должен быть две цифры.

Позорно, DateTime::createFromFormat, новый причудливый способ PHP 5 для работы с датами, кажется, не в состоянии проанализировать этот тип информации - у него нет заполнителя "недели".

2 голосов
/ 23 апреля 2011
  • $week: номер недели
  • $year: номер года

Тогда:

$timestamp = gmmktime (0, 0 , 0 , 1, , 4 + 7*($week - 1), $year);

4 + 7*($week - 1)Происходит из того факта, что согласно ISO 8601 , первая неделя года - это та, которая содержит 4 января.

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

strtotime('1/1/2011 + 4 weeks') (1/1 всегда на первой неделе; это приведет меня к пятой неделе). если вы хотите любую метку времени на неделе, то это все, что вам нужно, иначе вам придется перейти на понедельник на этой неделе:

$t = strtotime('1/1/2011 + 4 weeks');
$t -=  24 * 60 * 60 * date('w', $t);

Обновление : вместо 1/1/2011 используйте первый понедельник 2011 года. Второй расчет больше не нужен.

...