PHP:使用date_sunset函数的奇怪行为

时间:2010-05-14 20:51:07

标签: php datetime

我正在查看PHP中的date_sunset函数,遇到了一个我觉得有点奇怪的问题。我有这段代码:

$sunset = date_sunset(mktime(0, 0, 0, 5, 14, 2010),
    $format,                // Format
    55.596041,              // Latitude
    12.992495,              // Longitude
    90,                     // Zenith
    2                       // GMT Offset
);

对于三种不同的格式,这会给我:

SUNFUNCS_RET_STRING    21:05
SUNFUNCS_RET_DOUBLE    21.095732016315
SUNFUNCS_RET_TIMESTAMP 1273863944 // H:i:s O -> 19:05:44 +0000

为什么时间戳格式忽略gmt偏移量?是应该是那样的?如果是这样的话背后的原因是什么?

2 个答案:

答案 0 :(得分:3)

时间戳不包含任何时区数据。它们是自大纪元以来的秒数,即1970年1月1日00:00:00

答案 1 :(得分:1)

date_sunset(,SUNFUNCS_RET_TIMESTAMP ,,,,)没有忽略偏移量,你用来格式化时间戳值的函数是(即时区设置为utc + 0),例如

$sunset = date_sunset(mktime(0, 0, 0, 5, 14, 2010),
    SUNFUNCS_RET_TIMESTAMP,                // Format
    55.596041,              // Latitude
    12.992495,              // Longitude
    90,                     // Zenith
    2                       // GMT Offset
);

date_default_timezone_set('UTC');
echo date('H:i:s O', $sunset), "\n";

date_default_timezone_set('Europe/Berlin');
echo date('H:i:s O', $sunset), "\n";

date_default_timezone_set('America/New_York');
echo date('H:i:s O', $sunset), "\n";

打印

19:06:07 +0000
21:06:07 +0200
15:06:07 -0400