Я пытаюсь сгруппировать даты в номер недели и год, а затем хочу преобразовать этот номер недели обратно в метку времени 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, похоже, не может анализировать такую информацию - у него нет заполнителя "неделя".
DateTime::createFromFormat()
по-прежнему актуально сегодня, к сожалению, я хочу добавить, что вы все еще можете использовать для этого DateTime: new DateTime('2011W01')
действительно работает.
- person Dennis98; 03.05.2019
$week
: номер недели$year
: номер года
Потом:
$timestamp = gmmktime (0, 0 , 0 , 1, , 4 + 7*($week - 1), $year);
4 + 7*($week - 1)
возникает из-за того, что согласно ISO 8601 первая неделя года является который содержит 4 января.
1/1/2011
был все еще на неделе 52/2010 в соответствии с ISO 8601.
- person Pekka; 23.04.2011
mktime()
или gmmktime()
вместо strtotime()
- person James C; 23.04.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 года. Второй расчет больше не нужен.
1/1/2011
был все еще на неделе 52/2010 в соответствии с ISO 8601.
- person Pekka; 23.04.2011