Calendar 函数
在线手册:中文  英文

jdtounix

(PHP 4, PHP 5)

jdtounix转变Julian Day计数为一个Unix时间戳

说明

int jdtounix ( int $jday )

这个函数根据给定的julian天数返回一个Unix时间戳,或如果参数jday不在Unix时间(Gregorian历法的1970年至2037年,或2440588 <= jday <= 2465342)范围内返回 FALSE 。返回的时间是本地时间(不是GMT)。

参数

jday

一个在 2440588 到 2465342 之间的julian天数

返回值

指定的julian天数的开始时的时间戳。

参见


Calendar 函数
在线手册:中文  英文

用户评论:

hrabi at linuxwaves dot com (2007-03-29 07:16:26)

Beware, jd here is not (astronomical or geocentric) Julian Day (JD), but Chronological Julian Day (CJD)! When JD start at noon of UTC time (12:00 UTC), CJD start at midnight at *local* time! Or considering head "Chronlogical Julian Day/Date" at "http://www.decimaltime.hynes.net/dates.html", when day localy start (it should be at sunset for instance).

try this...
<?php
define
("UJD"2440587.5);
define("SEC4DAY"86400);

function 
u2j($tm) {
   return 
$tm SEC4DAY UJD;
}

function 
mmd($txt$str_time) {
   
$t strtotime($str_time);
   
$j unixtojd($t);
   
$j_fabio u2j($t);
   
$s strftime('%D %T %Z'$t);

   
printf("${txt} => %s, CJD: %s, JD: %s<br>\n"$s$j$j_fabio);
}

$xt strtotime("1.1.1970 0:00.00 GMT");
$slb "-1 day 23:30"// let CJD be N
$sla "0:30.00"// should be N+1
$slm "0:00"// should be N+1
$sgmt "0:00.00 GMT"// don't forget to observe JD.

mmd("local before"$slb);
mmd("local after"$sla);
mmd("local midnight"$slm);
mmd("GMT midnight"$sgmt);
?>

I got this (you see, JD havn't change day, because UTC noon is far away):
local before => 03/28/07 23:30:00 CEST, CJD: 2454188, JD: 2454188.39583
local after => 03/29/07 00:30:00 CEST, CJD: 2454189, JD: 2454188.4375
local midnight => 03/29/07 00:00:00 CEST, CJD: 2454189, JD: 2454188.41667
GMT midnight => 03/29/07 02:00:00 CEST, CJD: 2454189, JD: 2454188.5

erelsgl dot NOSPAM at cs dot technion dot ac dot il (2006-09-19 06:31:22)

Just to clarify the differences between the different methods to convert a date to a timestamp.

Suppose:

<?php
$x 
JDToUnix(GregorianToJD(9,23,2006));
$y strtotime('2006-09-23');
$z = (GregorianToJD(9,23,2006) - 2440587.5) * 86400;
?>

Then, on a machine whoze timezone is GMT-0400, we get the following results:
<?php
$x 
=== 1158969600;
$y === 1158984000;  //  $x + 4 hours
$z === 1159012800;  //  $x + 12 hours
?>

fabio at llgp dot org (2006-08-31 02:14:38)

If you need an easy way to convert a decimal julian day to an unix timestamp you can use:
$unixTimeStamp = ($julianDay - 2440587.5) * 86400;
2440587.5 is the julian day at 1/1/1970 0:00 UTC
86400 is the number of seconds in a day

(2005-01-27 06:50:50)

Warning: the calender functions involving julian day operations seem to ignore the decimal part of the julian day count.
This means that the returned date is wrong 50% of the time, since a julian day starts at decimal .5 . Take care!!

seb at carbonauts dot com (2003-10-21 12:10:23)

Remember that unixtojd() assumes your timestamp is in GMT, but jdtounix() returns a timestamp in localtime.
This fooled me a few times.
So if you have:
$timestamp1 = time();
$timestamp2 = jdtounix(unixtojd($timestamp1));
Unless your localtime is the same as GMT, $timestamp1 will not equal $timestamp2.

pipian at pipian dot com (2003-06-12 09:29:05)

Remember that UNIX timestamps indicate a number of seconds from midnight of January 1, 1970 on the Gregorian calendar, not the Julian Calendar.

易百教程