问题描述
|
关于此功能,我有两件事不了解:
1.使用SUNFUNCS_RET_TIMESTAMP格式时不考虑偏移。例如,如果我使用SUNFUNCS_RET_STRING格式并使用以下代码:
$lat = 46.055556; // Latitude (Ljubljana).
$long = 14.508333; // Longitude (Ljubljana).
$offset = 2; // Difference between GMT and local time in hours.
$zenith = 90 + 50 / 60;
echo \"<br><p>Sunrise: \" . date_sunrise(time(),SUNFUNCS_RET_STRING,$lat,$long,$zenith,$offset);
echo \"<br>Sunset: \" . date_sunset(time(),$offset);
然后它将以某种方式显示正确的answear(根据我的意思,在第二点中将进行解释):
日出:05:15
日落:20:42
现在,如果我使用SUNFUNCS_RET_TIMESTAMP并将其转换为具有日期date()函数的日期的字符串表示形式:
$lat = 46.055556; // Latitude (Ljubljana).
$long = 14.508333; // Longitude (Ljubljana).
$offset = 2; // Difference between GMT and local time in hours.
$zenith = 90 + 50 / 60;
$dateSunRise = date_sunrise(time(),SUNFUNCS_RET_TIMESTAMP,$offset);
$dateSunSet = date_sunset(time(),$offset);
echo \"<br><p>Sunrise: \" . date(\"H:i\",$dateSunRise);
echo \"<br><p>Sunrise: \" . date(\"H:i\",$dateSunSet);
我得到这个结果:
日出:03:15
日出:18:42
我检查了时间戳,肯定返回了错误,这就是为什么我不明白,因为我定义的偏移量与使用SUNFUNCS_RET_STRING的上一个示例相同。
2.在我写的第一点上,它以某种方式显示了正确的answear,这是我的意思的解释。我们的官方气象机构ARSO每天在其页面上更新有关日出和日落的信息。该页面可以在此链接上找到(很抱歉,因为它不是英文的)。最重要的是,对于我们的首都(卢布尔雅那),它具有以下信息:
日出:5:18
日出:20:41
我在使用date_sunrise和date_sunset函数得到的地方是:
日出:05:15
日落:20:42
参数与第一个点相同(纬度,经度,偏移,天顶)。现在,纬度和经度肯定是正确的(已通过GeoHack检查卢布尔雅那)。我开始认为这种差异来自天顶参数。但是我在互联网上搜索,上面写着:
天顶的最佳总体数字是真实日出/日落时90+(50/60)度
我不知道为什么会出现这种差异,这两个函数是否可能返回错误的结果?
解决方法
使用时间戳记时,它们几乎总是UNIX时间戳记,这意味着它们是以UTC给出的。与它们一起使用时,您必须在计算结束时将它们转换为您自己的时区。为了您的目的,您可能只需要SUNFUNCS_RET_STRING。
对于第二点,天顶在计算日出和日落的确切分钟数方面起着很大的作用。
90+(50/60)
只是一个估算。在线上有一些计算器,可以为您提供更好的数字以用于坐标,并且日出和日落时它们将有所不同。
以下代码将为您提供在卢布尔雅那寻找的电话号码:
$lat = 46.055556; // Latitude (Ljubljana).
$long = 14.508333; // Longitude (Ljubljana).
$offset = 2; // Difference between GMT and local time in hours.
$rise_zenith = 90+(25/60);
$set_zenith = 90+(40/60);
echo \"<br>Sunrise: \" . date_sunrise(time(),SUNFUNCS_RET_STRING,$lat,$long,$rise_zenith,$offset);
echo \"<br>Sunset: \" . date_sunset(time(),$set_zenith,$offset);