PHP Conference Japan 2024

gregoriantojd

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

gregoriantojdGregoryen tarihini, Jülyen Gün Sayısına çevirir

Açıklama

gregoriantojd(int $ay, int $gun, int $yil): int

Gregoryen Takvimi için geçerli olan aralık M.Ö. 25 Kasım 4714 ile M.S. 31 Aralık 9999 arasıdır.

Bu işlev M.Ö. 4714'e kadar olan tarihleri işleyebilse de, bu tip bir kullanım anlamlı değildir. Gregoryen takvimi 15 Ekim 1582'ye (Jülyen takvimine göre 5 Ekim 1582) kadar kullanılmamıştır. Hatta bazı ülkeler bu tarihten daha sonra kullanmaya başlamıştır, örneğin; İngiliz krallığı 1752, SSCB 1918 ve Yunanistan 1923'de geçmiştir. Birçok Avrupa ülkesi Gregoryen takviminden önce Jülyen takvimini kullanmıştır.

Bağımsız Değişkenler

ay

1'den (Ocak), 12'ye (Aralık) kadar ay değeri

gun

1 ile 31 arasında gün değeri. Ay belirtilenden daha az güne sahipse fazla günler sonraki aya taşar; bkz. aşağıdaki örnek.

yil

-4714 ile 9999 arasında yıl değeri. Negatif sayılar M.Ö. yıllar, pozitif sayılar M.S. yıllardır. Sıfır yılı yoktur. 31 Aralık -1'den sonra 1 Ocak 1 gelir.

Dönen Değerler

Gregoryen tarihine karşılık tamsayı olarak Jülyen Gün Sayısı. Geçerli aralığın dışında kalan tarihler için 0 döner.

Örnekler

Örnek 1 Takvim işlevleri örneği

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

Yukarıdaki örneğin çıktısı:

2440871
10/11/1970

Örnek 2 - Taşma durumu

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

Yukarıdaki örneğin çıktısı:

2458181
2458181

Ayrıca Bakınız

  • jdtogregorian() - Jülyen Gün Sayısını, Gregoryen tarihine çevirir
  • cal_to_jd() - Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar

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
20 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
-5
jfg
15 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