Some people might find it useful to use a function that takes in dates formatted by ISO8601 standards (yyyy-mm-dd):
<?php function daysBetweenDate($from, $till) {
/*
*This function will calculate the difference between two given dates.
*
*Please input time by ISO 8601 standards (yyyy-mm-dd).
*i.e: daysBetweenDate('2009-01-01', '2010-01-01');
*This will return 365.
*
*Author: brian [at] slaapkop [dot] net
*May 5th 2010
*/
if($till < $from) {
trigger_error("The date till is before the date from", E_USER_NOTICE);
}
//Explode date since gregoriantojd() requires mm, dd, yyyy input;
$from = explode('-', $from);
$till = explode('-', $till);
//Calculate date to Julian Day Count with freshly created array $from.
$from = gregoriantojd($from[1], $from[2], $from[0])."<br />";
//Calculate date to Julian Day Count with freshly created array $till.
$till = gregoriantojd($till[1], $till[2], $till[0])."<br />";
//Substract the days $till (largest number) from $from (smallest number) to get the amount of days
$days = ($till - $from);
//Return the number of days.
return $days;
//Isn't it sad how my comments use more lines than the actual code?
}
?>
GregorianToJD
(PHP 4, PHP 5)
GregorianToJD — グレゴリウス日をユリウス積算日に変換する
説明
int gregoriantojd
( int
$month
, int $day
, int $year
)有効なグレゴリウス暦の範囲は紀元前 4714 年から紀元 9999 年までです。
このソフトウェアは日付けを全て紀元前 4714 年にさかのぼることが 出来ますが、この様な使い方は特に意味があるわけではありません。 グレゴリウス暦は 1582 年 10 月 15 日(ユリウス暦では 1582 年 10 月 5 日)まで制定されていませんでした。 この暦は、いくつかの国でもっと後まで受け入れられませんでした。 例えば、イギリスは 1752 年、ロシア(USSR)は 1918 年、ギリシャは 1923 年に 移行しました。 ほとんどのヨーロッパの国々では、グレゴリウス暦の前は ユリウス暦を使用していました。
パラメータ
-
month -
月を表す、1 (January) から 12 (December) までの数字。
-
day -
日を表す、1 から 31 までの数字。
-
year -
年を表す、-4714 から 9999 までの数字。
返り値
指定したグレゴリウス日をユリウス積算日になおした結果を返します。
例
例1 カレンダー関数
<?php
$jd = GregorianToJD(10, 11, 1970);
echo "$jd\n";
$gregorian = JDToGregorian($jd);
echo "$gregorian\n";
?>
brian at slaapkop dot net
10-May-2010 07:53
jfg
07-Apr-2009 01:19
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);
}
?>
ryker at ridgex dot net
06-Jun-2006 08:27
<?php
/*
* ComputeDateDifference(...)
* Description:
* Calculates the difference between two dates.
*
* Parameter:
* $m0, $d0, $y0 => 1. Moth/Day/Year
* $m1, $d1, $y1 => 2. Moth/Day/Year
*
* Return:
* Difference between given dates in days.
*
* Autor:
* 06.06.2006 - Christian Meyer <ryker@ridgex.net>
*/
function ComputeDateDifference($m0,$d0,$y0,$m1,$d1,$y1)
{
$x0 = gregoriantojd($m0,$d0,$y0);
$x1 = gregoriantojd($m1,$d1,$y1);
$diff = $x1 - $x0;
if ($diff < 0)
$diff *= -1; // abs
return $diff;
}
?>
jettyrat at jettyfishing dot com
17-Mar-2005 01:34
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;
?>
httpwebwitch
08-Jun-2004 04:04
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.
