Php как ехать со дня на год до даты и наоборот - PullRequest
12 голосов
/ 16 марта 2012

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

getdatefromday(275, 2012) 

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

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

Ответы [ 8 ]

20 голосов
/ 16 марта 2012

Это довольно легко все вокруг.Вы должны прочитать о DateTime статическом методе createFromFormat объекта здесь , 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'));
3 голосов
/ 16 марта 2012

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

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

и это:

echo date('z', strtotime('21 oct 2012'));
2 голосов
/ 16 марта 2012
$todayid = date("z");  // to get today's day of year

function dayofyear2date( $tDay, $tFormat = 'd-m-Y' ) {
$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);

день года

1 голос
/ 16 января 2015

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

// 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 "Y-m-d"
// 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 голосов
/ 20 мая 2019
function getDateFromDayOfYear($dayOfYear,$year){
    return date('Y-m-d', strtotime('January 1st '.$year.' +'.$dayOfYear.' days'));
}
0 голосов
/ 24 ноября 2014
function DayToTimestamp($day, $year = null)
{
    isset($year) or $year = date('Y');
    return strtotime("1 Jan $year +$day day");
}
0 голосов
/ 16 марта 2012

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

0 голосов
/ 16 марта 2012

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

Чтобы пойти другим путем, потребуется немного творчества.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...