Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 函数date_sunrise()返回错误的时间,并且可能返回错误的结果_Php_Date - Fatal编程技术网

Php 函数date_sunrise()返回错误的时间,并且可能返回错误的结果

Php 函数date_sunrise()返回错误的时间,并且可能返回错误的结果,php,date,Php,Date,有两件事我不明白: 1.以SUNFUNCS_RET_TIMESTAMP格式使用时不考虑偏移量。例如,如果我使用SUNFUNCS_RET_字符串格式并使用以下代码: $lat = 46.055556; // Latitude (Ljubljana). $long = 14.508333; // Longitude (Ljubljana). $offset = 2; // Difference between GMT and local time in hours. $zenith

有两件事我不明白:

1.以SUNFUNCS_RET_TIMESTAMP格式使用时不考虑偏移量。例如,如果我使用SUNFUNCS_RET_字符串格式并使用以下代码:

$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(), SUNFUNCS_RET_STRING, $lat, $long, $zenith, $offset);
$lat=46.055556;//纬度(卢布尔雅那)。
$long=14.508333;//经度(卢布尔雅那)。
$offset=2;//格林尼治标准时间和当地时间之间的差异(以小时为单位)。
$zenith=90+50/60;
回声“
日出:”。日出日期(time(),SUNFUNCS\u RET\u字符串,$lat,$long,$zenith,$offset); 回声“
日落:”。日期(time(),SUNFUNCS\u RET\u字符串,$lat,$long,$zenith,$offset);
然后它将以某种方式显示正确的answear(我的意思将在第二点中解释):

日出:05:15 日落:20:42

现在,如果我使用SUNFUNCS_RET_TIMESTAMP并将其转换为带有函数date()的日期的字符串表示形式:

$lat=46.055556;//纬度(卢布尔雅那)。
$long=14.508333;//经度(卢布尔雅那)。
$offset=2;//格林尼治标准时间和当地时间之间的差异(以小时为单位)。
$zenith=90+50/60;
$dateSunRise=date_sunrise(time(),SUNFUNCS_RET_TIMESTAMP,$lat,$long,$zenith,$offset);
$dateSunSet=date\u sunset(time(),SUNFUNCS\u RET\u TIMESTAMP,$lat,$long,$zenith,$offset);
回声“
日出:”。日期(“H:i”、$dateSunRise); 回声“
日出:”。日期(“H:i”,美元日期日落);
我得到这个结果:

日出:03:15 日出:18:42

我检查了时间戳,它肯定返回错误,这就是我不理解的原因,因为我在前面的示例中使用了SUNFUNCS_RET_STRING定义了相同的偏移量

2.在我写的第一点中,它显示了某种程度上正确的answear,这里是我的意思的解释。我们的官方气象机构ARSO每天在其网页上更新有关日出和日落的信息。可以在上找到该页面(抱歉,因为它不是英文的)。底线是,我们的首都(卢布尔雅那)有以下信息:

日出:5:18 日出:20:41

在这里,我使用date_sunrise和date_sunset函数得到以下结果:

日出:05:15 日落:20:42

参数与第一个点相同(纬度、经度、偏移、天顶)。现在纬度和经度肯定是正确的()。我开始认为这种差异来自天顶参数。但我在互联网上搜索过,上面写着:

对于真正的日出/日落,天顶的最佳整体形状是90+(50/60)度


我不明白为什么会出现这种差异,这两个函数是否可能返回错误的结果?

当使用时间戳时,它们几乎总是UNIX时间戳,这意味着它们是以UTC表示的。在使用它们时,您必须在计算结束时将它们转换为您自己的时区。出于您的目的,您可能只需要SUNFUNCS_RET_字符串

对于第二点,天顶在计算日出和日落的准确分钟数方面起着重要作用。
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(), SUNFUNCS_RET_STRING, $lat, $long, $set_zenith, $offset);
$lat=46.055556;//纬度(卢布尔雅那)。
$long=14.508333;//经度(卢布尔雅那)。
$offset=2;//格林尼治标准时间和当地时间之间的差异(以小时为单位)。
$rise_zenith=90+(25/60);
$set_zenith=90+(40/60);
回声“
日出:”。日出日期(time(),SUNFUNCS\u RET\u STRING,$lat,$long,$rise\u zenith,$offset); 回声“
日落:”。日期(time(),SUNFUNCS\u RET\u字符串,$lat,$long,$set\u天顶,$offset);
感谢您的支持!关于时间戳,我需要SUNFUNCS_RET_TIMESTAMP,因为我在flot图中使用这个数据,这意味着date参数需要在UNIX时间戳中乘以1000(它使用毫秒)。其中SUNFUNCS_RET_字符串仅返回包含小时和分钟的字符串。但不用担心,我用以下代码解决了这个问题:$dateSunRise=(date_sunrise(time(),SUNFUNCS_RET_TIMESTAMP,$lat,$long,$zenith,$offset)+2*60*60*1000;感谢天顶上升和天顶下降公式。我想知道,这个公式是否适用于全年,还是会随着地球相对于太阳的位置而变化?我不是这方面的专家。因为这些数字是在日出和日落时使用的,我相信这是你的地平线的角度。如果你的地平线在各个方向上都相对平坦,你就不需要改变它。否则,您可能希望在一年中的其他时间点验证它们。使用
$rise\u zenith
$set\u zenith
我能够确认我的坐标的明显日出和日落。时间完全吻合+1.
$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(), SUNFUNCS_RET_STRING, $lat, $long, $set_zenith, $offset);