If you need an easy way to convert an unix timestamp to a decimal julian day you can use:$julianDay = $unixTimeStamp / 86400 + 2440587.5;86400 is the number of seconds in a day;2440587.5 is the julian day at 1/1/1970 0:00 UTC.(PHP 4, PHP 5, PHP 7, PHP 8)
unixtojd — Convert Unix timestamp to Julian Day
Return the Julian Day for a Unix timestamp
(seconds since 1.1.1970), or for the current day if no
timestamp is given. Either way, the time is regarded
as local time (not UTC).
timestampA unix timestamp to convert.
A julian day number as integer, або false в разі помилки.
| Версія | Опис |
|---|---|
| 8.0.0 |
timestamp is nullable now.
|
If you need an easy way to convert an unix timestamp to a decimal julian day you can use:$julianDay = $unixTimeStamp / 86400 + 2440587.5;86400 is the number of seconds in a day;2440587.5 is the julian day at 1/1/1970 0:00 UTC.Its clearly stated that this function returns the Julian Day, not Julian Day + time.If you want the time with it you will have to do something like:$t=time();$jd=unixtojd($t)+($t%60*60*24)/60*60*24;unixtojd is slow.Direct arithmetics calculations are faster and still coherent with original unixtojd.Feel free to add a test on $timestamp to set it to time() when $timestamp is null.function fast_unixtojd($timestamp){ return intval($timestamp / 86400 + 2440588);}$time = time();$t_unixtojd = 0;$t_fast_unixtojd = 0;for ($t = $time - 240 * 3600; $t < $time; $t++) { $time1 = microtime(true); $a = unixtojd($t); $time2 = microtime(true); $b = fast_unixtojd($t); $time3 = microtime(true); if ($a != $b) { echo "$a $b $t\n"; break; } $t_unixtojd += $time2 - $time1; $t_fast_unixtojd += $time3 - $time2;}echo "unixtojd: $t_unixtojd sec\nfast_unixtojd: $t_fast_unixtojd sec\n";unixtojd: 0.42854166030884 secfast_unixtojd: 0.13218021392822 secaccording to http://www.decimaltime.hynes.net/dates.html#jd and reading "X. Calendar Functions" on this side, it seems that php "jd" is precisely mean as "Chronological Julian Day" (should it be named cjd, and primarily strictly mentioned - isn't it?), used for covnersion between calendar systems. Than it's ok (but Incomplete manual is strongly confusing here IMHO).Even that, cJD is adjusted to a local time, so... I am rather babeled now, so nothing else :-).This is unusable. Julian Day start at noon, not midnight. It's better to use Fabio solution (however there is a lurk problem with leap second).<?phpfunction mmd($txt, $str_time) { $t = strtotime($str_time); $j = unixtojd($t); $s = gmstrftime('%D %T %Z', $t); $j_fabio = $t / 86400 + 2440587.5; printf("${txt} => (%s) %s, %s U, %s J, or %s J<br>\n", $str_time, $s, $t, $j, $j_fabio);}//$xt = strtotime("1.1.1970 15:00.00 GMT");$sam = "9.10.1995 02:00.01 GMT";$spm = "9.10.1995 22:00.01 GMT";// unixtojd for $spm returns 2450000 (OK), but for $sam returns 2450000 too! (it is wrong).mmd("am", $sam); // should be 2449999 (+ 0.58334)mmd("pm", $spm); // should be 2450000 (+ 0.41668)?>referenceunix time, and UTC, TAI, ntp, ... problems: http://en.wikipedia.org/wiki/Unix_timeJulian Date Converter: http://aa.usno.navy.mil/data/docs/JulianDate.htmlhistory overview: http://parris.josh.com.au/humour/work/17Nov1858.shtmlAlso note that epoch is in UTC time (epoch is a specific point in time - epoch is not different for every time zone), so be aware of timezone complexities.