Php, как идти с дня года до настоящего времени и наоборот

Как вы идете в php с n-го дня в году до даты, например:

getdatefromday(275, 2012) 

и он выводит дату (лучше, если объект).

И я тоже хотел бы сделать обратное, как getdayoftheyear("21 oct 2012")

Это довольно легко. Здесь вы должны прочитать статический метод createFromFormat объекта DateTime , здесь функция date и функция strtotime .

 // This should get you a DateTime object from the date and year. function getDateFromDay($dayOfYear, $year) { $date = DateTime::createFromFormat('z Y', strval($dayOfYear) . ' ' . strval($year)); return $date; } // This should get you the day of the year and the year in a string. date('z Y', strtotime('21 oct 2012')); 

Попробуйте (дни начинаются с 0 не 1 ):

 $date = DateTime::createFromFormat( 'Y z' , '2012 275'); var_dump($date); 

и что:

 echo date('z', strtotime('21 oct 2012')); 
 $todayid = date("z"); // to get today's day of year function dayofyear2date( $tDay, $tFormat = 'dmY' ) { $day = intval( $tDay ); $day = ( $day == 0 ) ? $day : $day - 1; $offset = intval( intval( $tDay ) * 86400 ); $str = date( $tFormat, strtotime( 'Jan 1, ' . date( 'Y' ) ) + $offset ); return( $str ); } echo dayofyear2date($todayid); 

день года

Вы можете использовать strtotime (), чтобы получить количество секунд для значения года ( http://de2.php.net/manual/en/function.strtotime.php ). Чем меньше количество дней в секундах (день * 24 * 60 * 60). Теперь вы можете использовать это значение с датой () (см. Первый ответ)

 function DayToTimestamp($day, $year = null) { isset($year) or $year = date('Y'); return strtotime("1 Jan $year +$day day"); } 

Я знаю, что это немного устарело, и ответ уже принят, но я хотел бы предложить альтернативный способ сделать это, пытаясь использовать точные форматы, требуемые владельцем вопроса:

 // This gets the day of the year number // given a formatted date string like // "21 oct 2012" function getdayoftheyear($dateString) { date('z', strtotime($dateString)); } 

Другой способ:

 // This gets the date formatted in $dateFormat way // like "Ymd" // given the $dayOfTheYear and the $year in numeric form function getdatefromday($dateFormat, $dayOfTheYear, $year) { date($dateFormat, mktime(0, 0, 0, 1, ($dayOfTheYear + 1), $year)); } 

Эта вторая функция использует функцию mktime (), позволяющую задавать любые числа в списке параметров, поскольку она управляет переполнениями, нахождением на самом деле подходящего месяца. Поэтому, если вы вызываете mktime (0, 0, 0, 1, 32, 2015), он действительно знает, что 32-й день 1-го месяца – 1-й день 2-го месяца и т. Д.

Получить день в году легко. Просто используйте функцию даты с правильным параметром, как указано в руководстве (он возвращает 0 за январь-1 – 365 за декабрь-31 в високосный год).

Переход на другой путь потребует немного творчества.