Как конвертировать номер недели и год в метку времени Unix?

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

3 ответа

Решение

Я предполагаю, что вы используете номера недель 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, по-видимому, не в состоянии анализировать такую ​​информацию - у него нет "недельного" заполнителя.

  • $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 всегда на неделе номер один; это привело бы меня к неделе номер пять). если вам нужна какая-либо временная метка на неделе, тогда это все, что вам нужно, в противном случае вам придется перейти на понедельник на этой неделе:

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

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

Другие вопросы по тегам