-2

我在主机上有一些 php 脚本,但托管时间与我的本地时间 (GMT+8) 不同 如何将正确的 time() 脚本设置为 GMT+8?

当我使用:

<?
echo time(); //it show me the hosting time;
?>
4

5 回答 5

4

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
于 2013-11-12T12:24:25.947 回答
1

您的假设不正确

int time ( void )

返回自 Unix 纪元(格林威治标准时间 1970 年 1 月 1 日 00:00:00)以来以秒数测量的当前时间。

Unix Epoch 是一个固定的时间点。如果你真的得到一个无效的时间戳,你的托管服务提供商并不关心设置服务器的时钟。

如果你想做体面的时区感知日期处理,我建议你了解DateTime类和朋友,并且:

  1. 使用命名时区 ( Europe/Madrid) 而不是 UTC 偏移量 ( +01:00),因为它们考虑了 DST。

  2. 将应用程序的时区设置为默认值,这样您就不需要每次都指定它:

    date_default_timezone_set("Europe/Helsinki"); 
    
  3. 永远不要自己做日期数学(例如,不要手动添加 86400 秒来增加一天)。

于 2013-11-12T12:23:56.833 回答
0

将 28800(8 小时转换为秒)添加到 time() 的输出

<?php echo (time()+28800); ?>

我不确定,但是 time() 返回的时间戳相当于 GMT,因此,添加 8 小时的时间戳将为您提供 GMT+8。同样,您甚至可以减去时间

于 2013-11-12T13:26:30.773 回答
0

您必须在 php 中设置本地时间

函数date_default_timezone_set

支持的时区列表

例子:

date_default_timezone_set("America/Fortaleza"); 
echo time(); // Local Time in America/Fortaleza
于 2013-11-12T12:25:49.960 回答
-3

您可以使用 date_default_timezone_set() 函数,例如

date_default_timezone_set('Asia/Dhaka');
于 2013-11-12T12:21:28.740 回答