Преобразование из дня недели в Unix время в PHP - PullRequest
0 голосов
/ 24 марта 2010

Я пытаюсь получить время Unix для строк даты, которые отформатированы так:

'second sunday of march 2010'
'first sunday of november 2010'

У меня сложилось впечатление, что strtotime может обрабатывать такую ​​строку, но, видимо, нет, поскольку это возвращает false. Как я могу преобразовать в Unix время, когда дан день недели, который из числа в месяце (т.е. первый, второй и т. Д.), Месяц и год.

Ответы [ 2 ]

3 голосов
/ 24 марта 2010

Это должно быть возможно с strtotime. Вы можете попытаться сгенерировать метку времени первого дня марта, используя mktime() и добавив ее в качестве второго параметра (оставив только «первое воскресенье» в строковой части):

$timestamp = mktime (0,0,0,3,1,2010);  // 1st of march
$first_sunday = strtotime("first sunday", $timestamp);

Не уверен, как с этим справится первый день (1 марта), который фактически является воскресеньем. Не забудьте проверить это.

Также, и, возможно, это более надежно, отметьте это - на плакате написано, что он добился хороших результатов со следующими обозначениями (цитата):

<?php
strtotime('+0 week sun nov 2009'); // first sunday in nov 2009
strtotime('+1 week sun nov 2009'); // second sunday
strtotime('-1 week sun nov 2009'); // last sunday in oct 2009
?>

Как всегда в strtotime, что бы вы ни выбрали, убедитесь, что вы хорошо тестируете, особенно в крайних случаях (1-й день месяца - воскресенье, последний день прошлого месяца - воскресенье ....)

0 голосов
/ 24 марта 2010

Ваш код работает для меня на PHP 5.3.0. Какую версию PHP вы используете?

<?php
date_default_timezone_set("Europe/Oslo");
$time_march = strtotime('second sunday of march 2010');
$time_november = strtotime('first sunday of november 2010');
echo date("Y-m-d", $time_march) . " (timestamp: $time_march)\n";
echo date("Y-m-d", $time_november) . " (timestamp: $time_november)\n";
?>

дает:

2010-03-14 (timestamp: 1268521200)
2010-11-07 (timestamp: 1289084400)
...