php - 将本地时间转换为 GMT

标签 php date datetime time

我有这些数据可供使用:

Timezone of local time as integer: 8.75 (which is UTC+8.75)
1) 2012-09-04 03:15:03
2) 2012-09-03 18:30:03 (GMT)
3) 1346728503
4) 1346697003 (GMT)

现在,我想知道如何将本地时间 (1) 转换为 GMT 一 (2)(反之亦然),同时考虑到所有可能的异常(exception)情况,例如夏令时、1970-2038 年时间限制等?无论如何,它们重要吗?

PHP 函数主要不允许指定本地时间的时区来转换时间 - 它们采用服务器的本地时间,这不是我想要的(而且我也不想改变它)。 我显然可以从 1346728503 (3) 中减去 8.75*60*60,但是无论如何这都会产生准确的值吗?

最佳答案

好的,首先:接受时间戳的 PHP 函数不接受时区,因为 UNIX 时间戳不知道也不关心时区

正如我所输入的,现在是美国东部时区 2012 年 9 月 3 日星期一 15:30:10,目前正在实行夏令时(“夏令时”)。在 UTC 时区中,该时间对应于 19:30:10。无论哪种方式,它都是 UNIX 时间戳(time_t 值)1,346,700,610。根据您在地球表面的位置,您当时的本地时间可能落在 26 小时范围内的任何时间,从 9 月 3 日上午 7:30:10 到 9 月 4 日上午 9:30:10 (2012-09- 03T07:30:10-12:00 至 2012-09-04T09:30:10+14:00)。但无论您的本地标签是什么,对于 UNIX 和 PHP,有问题的时间仍然是 1,346,700,610。

您似乎尝试根据时区计算不同的 time_t 值,但并没有计算。时区偏移永远不会应用于不会更改的 time_t 值;它们仅适用于人类可读的表示。

如果可能的话,不要尝试进行自己的时区转换。规则往往会改变。现在,我的本地时间比 UTC 早四个小时;几个月后,就会提前5个小时。此外,今年发生变化的规则与五年前不同。因此,根据我尝试转换的具体时间戳值,我必须应用不同的规则。

使用库函数。

要将时间的字符串表示形式转换为 time_t 值,请使用 strtotime 。如果字符串包含时区引用,strtotime 将为您进行转换。如果没有,您可以使用date_default_timezone_set正如 Connie 建议的那样,告诉 PHP 在解释字符串时使用哪个时区。

要将 time_t 值转换回字符串,请使用 date获取“本地”时间(即根据 date_default_timezone_set 设置的时区的时间;您可以使用 date_default_timezone_get 询问 PHP 该时区是什么),或 gmdate获取 UTC。

关于php - 将本地时间转换为 GMT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253042/

相关文章:

java - 如果定义了时区,则 Calendar.getTime() 不返回 UTC 日期

php - Laravel 启动方式

java.util.Date equals() 似乎没有按预期工作

javascript - 跨浏览器始终从 Javascript 中的 JSON 时间戳解析日期

date - Julia /日期 : convert a timespan from "days" to "year" or "Float64"

sql - 如何获取范围内一年中特定月份的天数总和

r - 如何从 strptime 中提取年份?

php没有在浏览器上运行

php - 在 magento 中为订单添加评论

php - 如何通过android以表格格式显示访问另一个类中的微调器选定值