Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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中是否有一种引用透明的方式来处理时间_Php_Time_Timestamp With Timezone - Fatal编程技术网

在php中是否有一种引用透明的方式来处理时间

在php中是否有一种引用透明的方式来处理时间,php,time,timestamp-with-timezone,Php,Time,Timestamp With Timezone,无论代码何时何地运行,我都尝试在以下时区之间转换时间: 运行代码的时区 AEST(澳大利亚东部标准时间) 美国东部夏令时(纽约东部夏时制) 例如,给定一个unix时间戳,如何使用EDT时区查找新的unix时间戳“同一周的星期一”?如何做到这一点,使其始终给出相同的结果?首先,您必须了解Unix时间戳与时区无关,它始终与UTC/GMT相关。请引用手册中的内容 返回自Unix纪元(1970年1月1日00:00:00 GMT)以来以秒为单位测量的当前时间 既然您知道一个时间戳代表一个相对于GMT/

无论代码何时何地运行,我都尝试在以下时区之间转换时间:

  • 运行代码的时区
  • AEST(澳大利亚东部标准时间)
  • 美国东部夏令时(纽约东部夏时制)

例如,给定一个unix时间戳,如何使用EDT时区查找新的unix时间戳“同一周的星期一”?如何做到这一点,使其始终给出相同的结果?

首先,您必须了解Unix时间戳与时区无关,它始终与UTC/GMT相关。请引用手册中的内容

返回自Unix纪元(1970年1月1日00:00:00 GMT)以来以秒为单位测量的当前时间

既然您知道一个时间戳代表一个相对于GMT/UTC的固定时间,那么您可以继续并更改代码中的时区,以计算它们形成相同时间戳的时间

假设您有一个unix时间戳

$ts = 1171502725;
如果您根据它创建一个日期,您将执行以下操作

$date = new DateTime("@$ts");
echo $date->format('U = Y-m-d H:i:s T') . "\n";
现在你想看看它在EST中对应什么,你可以这样做

$date->setTimezone(new DateTimeZone('America/New_York'));
echo $date->format('U = Y-m-d H:i:s T') . "\n";
CST也是如此

$date->setTimezone(new DateTimeZone('America/Chicago'));
echo $date->format('U = Y-m-d H:i:s T') . "\n";
等等:)

输出

1171502725 = 2007-02-15 01:25:25 GMT+0000
1171502725 = 2007-02-14 20:25:25 EST
1171502725 = 2007-02-14 19:25:25 CST


您可以从

获取受支持时区及其标识符的列表。是否还涉及数据库?或者只是PHP?微挑剔的可能重复:(1)一般来说,“Unix时间戳”只计算非闰SI秒,例如,在
2015-06-30 18:59:59 CST
2015-06-30 19:00:00 CST
之间经过2秒(其间有闰秒),但POSIX时间仅计算1秒。(2) 在非POSIX情况下,Unix时间戳可能不同,例如,如果使用了
“right/UTC”
时区,则时间戳表示实际经过的SI秒(TAI时间刻度,历元:1970年1月1日00:00:10 TAI)。否。首先你必须明白我想要EDT时区,一年四季。