Как преобразовать юлианский день (не дату) и григорианский год в григорианскую дату с помощью PHP?

Вот пример PHP для перехода от даты по юлианскому календарю к дате по григорианскому календарю:

$jd = gregoriantojd(10,3,1975);
echo($jd . "<br />");

$gregorian = jdtogregorian($jd);
echo($gregorian);

Output:
2442689
10/3/1975

Это работает, если у вас есть полная юлианская дата, но что, если у вас есть только юлианский день, например «254», и год «2012»? Как с помощью PHP получить дату по григорианскому календарю, используя только юлианский день и год по григорианскому календарю?

Вот график юлианских дней:

http://landweb.nascom.nasa.gov/browse/calendar.html

Возможно ли это с PHP?

Редактировать: на основе ответов, вот что я придумал, хотя может быть и более простой способ:

$JulianDay = 77;
$Year = 1977;
$DateYear = date("Y/m/d", mktime(0, 0, 0, 1, 1, $Year));
$GregDate = new DateTime($DateYear);
$GregDate->modify("+$JulianDay day");
$Date = $GregDate->format('Y/m/d');
echo $Date; // '1977/03/19'

person user1636317    schedule 30.08.2012    source источник


Ответы (3)


echo jdtogregorian(gregoriantojd(01, 01, 2012)+253);

Если 254 в 2012 году это 10 сентября (по вашей ссылке кажется) то работает нормально.

person aswyx    schedule 30.08.2012
comment
По какой-то причине это было отключено на один день ... хотя я не мог понять, почему. Спасибо, хотя это помогло мне отклеиться. - person user1636317; 31.08.2012
comment
Мой код генерирует юлианскую дату первого января в данном году. Поскольку первое января всегда равно 1 по юлианскому календарю, вам нужно вычесть 1 из вашего юлианского дня перед сложением, чтобы получить правильный результат. Я рад, что смог помочь; вы можете принять мой ответ, чтобы выразить свою благодарность;) - person aswyx; 31.08.2012

$date = strtotime('+'.YourDay.' days', mktime(0, 0, 0, 0, 0, YourYear));

strtotime и невероятная функция

person bokan    schedule 30.08.2012
comment
Это было отключено по какой-то причине... не мог понять, почему, но, вероятно, ошибка пользователя. Спасибо, в любом случае! - person user1636317; 31.08.2012

Вы можете использовать функцию ниже в php, чтобы сделать то же самое.

function d2julian($indate) {
    $year = ltrim(date('y', $indate),'0');     /* Year part with leading zeroes stripped    */
    if ($year == 0) $outdate = '00';
    else if ($year < 10) $outdate = '0' . $year;
    else $outdate = $year;

    $day = ltrim(date('z',$indate)+1,'0');    /* Day with leading zeroes stripped            */
    if ($day < 10) $outdate .= '00' . $day;
    else if ($day < 100) $outdate .= '0' . $day;
    else $outdate .= $day;

    return $outdate;
}

Надеюсь это поможет. Дайте мне знать, если у вас возникнут вопросы.

person TechGuide4U    schedule 01.06.2020