gregoriantojd

(PHP 4, PHP 5, PHP 7, PHP 8)

gregoriantojdConverte uma data gregoriana para o "Julian Day Count"

Descrição

gregoriantojd(int $month, int $day, int $year): int

A escala válida para o Calendário Gregoriano é de 25 de Novembro, 4714 A.C. até pelo menos 31 de Dezembro, 9999 D.C.

Entretanto esta função pode trabalhar com todas datas anteriores à, porém usá-la desta maneira não tem muito sentido. O Calendário Gregoriano não foi instituído até 15 de Outubro de 1582 (ou 5 de Outubro de 1582, no calendário JDC ("Julian Day Count")). Alguns países aceitaram este calendário um pouco mais tarde. Por exemplo, a Grã Bretanha converteu-se em 1752, a URSS em 1918 e a Grécia em 1923. A maioria dos países Europeus usaram o calendário "Julian" (JDC) antes do calendário Gregoriano.

Parâmetros

month

O mês como um número entre 1 (para janeiro) e 12 (para dezembro)

day

O dia como um número entre 1 e 31 Se o mês tem menos dias do que o especificado; veja o exemplo abaixo.

year

O ano como um número entre -4714 e 9999 Números negativos indicam anos A.C., números positivos indicam anos D.C. Note que não existe ano 0; 31 de Dezembro, 1 A.C. é seguido emediatamente por 1 de Janeiro, 1 D.C.

Valor Retornado

A data juliana para a dada data gregoriana como um inteiro. Datas fora da escala válida retornam 0.

Exemplos

Exemplo #1 Funções de Calendário

<?php
$jd
= gregoriantojd(10,11,1970);
echo
"$jd\n";
$gregorian = jdtogregorian($jd);
echo
"$gregorian\n";
?>

O exemplo acima produzirá:

2440871
10/11/1970

Exemplo #2 Overflow behavior

<?php
echo gregoriantojd(2, 31, 2018), PHP_EOL,
gregoriantojd(3, 3, 2018), PHP_EOL;
?>

O exemplo acima produzirá:

2458181
2458181

Veja Também

  • jdtogregorian() - Converte uma data no formato "Julian Day Count" para o formato Gregoriano
  • cal_to_jd() - Converte um calendário (suportado) para o calendário "Julian Day Count"

add a note add a note

User Contributed Notes 3 notes

up
2
jettyrat at jettyfishing dot com
19 years ago
You can obtain the decimal fraction of the Julian date with the php gregoriantojd() function or the function shown below by applying this code to the returned value.

<?php
  $julianDate
= gregoriantojd($month, $day, $year);

 
//correct for half-day offset
 
$dayfrac = date('G') / 24 - .5;
  if (
$dayfrac < 0) $dayfrac += 1;

 
//now set the fraction of a day
 
$frac = $dayfrac + (date('i') + date('s') / 60) / 60 / 24;

 
$julianDate = $julianDate + $frac;
?>
up
0
httpwebwitch
19 years ago
This function also ignores decimal fractions in JD dates, and it uses non-standard format for returning the Gregorian date.

So, if your JD date is 2453056.28673, the Gregorian returned value is 2/20/2004, not "2004-02-20 23:45:36"

The decimal part is important, since the Julian day begins at noon, for example 2453056.49 is on Friday, 2453056.50 is on Saturday. Discarding the decimal part means that your returned Gregorian Date will be wrong 50% of the time.
up
-2
jfg
14 years ago
If you need the same output as the g_date_get_julian function of the GlibC, here is my php implementation :

<?php
   
/**
     * Glib g_date_get_julian PHP implementation
     *
     * @param  $str  Date string in a format accepted by strtotime
     * @author jfg
     */
   
private function _get_julian( $str )
    {
       
$d = date_create($str);

        if(
$d == false )
            return
0;
       
       
$day_in_year = (int) date_format($d, "z");
       
$year        = (int) date_format($d, "Y") - 1;
       
$julian_days = $year * 365;
       
$julian_days += ($year >>= 2);
       
$julian_days -= ($year /= 25);
       
$julian_days += $year >> 2;
       
$julian_days += $day_in_year + 1;

        return
ceil($julian_days);
    }

?>
To Top