我在主机上有一些 php 脚本,但托管时间与我的本地时间 (GMT+8) 不同 如何将正确的 time() 脚本设置为 GMT+8?
当我使用:
<?
echo time(); //it show me the hosting time;
?>
time()
将始终返回自纪元以来的秒数。下面的代码将打印相同的两次。
date_default_timezone_set('Europe/London');
echo time();
date_default_timezone_set('America/Cuiaba');
echo time();
Unix Timestamp 的概念在设计上不携带时区信息。无论时区如何,给定的时间戳总是相同的。(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数)当您想表达考虑时区的时间戳时,您将使用当前时区的偏移量调整结果日期。
因此,当使用 PHP 的“c”格式选项date
(它确实反映时区信息)时,您将看到相同时间戳的不同表示
date_default_timezone_set('Europe/London');
echo time();
echo date('c')
date_default_timezone_set('America/Cuiaba');
echo time();
echo date('c');
将输出:
1384259474
2013-11-12T12:31:14+00:00
1384259474
2013-11-12T09:31:14-03:00
您的假设不正确:
int time ( void )
返回自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来以秒数测量的当前时间。
Unix Epoch 是一个固定的时间点。如果你真的得到一个无效的时间戳,你的托管服务提供商并不关心设置服务器的时钟。
如果你想做体面的时区感知日期处理,我建议你了解DateTime类和朋友,并且:
使用命名时区 ( Europe/Madrid
) 而不是 UTC 偏移量 ( +01:00
),因为它们考虑了 DST。
将应用程序的时区设置为默认值,这样您就不需要每次都指定它:
date_default_timezone_set("Europe/Helsinki");
永远不要自己做日期数学(例如,不要手动添加 86400 秒来增加一天)。
将 28800(8 小时转换为秒)添加到 time() 的输出
<?php echo (time()+28800); ?>
我不确定,但是 time() 返回的时间戳相当于 GMT,因此,添加 8 小时的时间戳将为您提供 GMT+8。同样,您甚至可以减去时间
您必须在 php 中设置本地时间
例子:
date_default_timezone_set("America/Fortaleza");
echo time(); // Local Time in America/Fortaleza
您可以使用 date_default_timezone_set() 函数,例如
date_default_timezone_set('Asia/Dhaka');