【发布时间】:2011-10-09 22:44:47
【问题描述】:
好的,所以我不确定我是否正确地将用户输入时间转换为 GMT。我将让多个时区的用户输入“事件”,他们必须能够看到当前time();“直到多久”或“多久”。
这就是我计划如何转换他们输入的时间。它将以07/21/2011 01:30 am 之类的形式开始,然后,
echo gmdate('Y-m-d H:i:s',strtotime('07/21/2011 01:30 am'));
给我2011-07-21 08:30:00
所以我打算取gmdate('Y-m-d H:i:s',strtotime('07/21/2011 01:30 am')); 的值,然后取time() 并向用户显示“距离此事件还有多长时间”。但似乎结果总是增加了 10 个小时,所以如果我从现在开始 30 分钟安排一个活动,它会说从现在开始 10 小时 30 分钟。所以,我想我没有正确转换当地时间或其他什么。
我错过了什么?也许我只是没有正确理解格林尼治标准时间。如何确保所涉及的所有时间都是 GMT 时间,以便网站上的所有用户都能使用所有时间?
如果有帮助的其他信息:
服务器时区为America/Los_Angeles
编辑: 在大家的建议之后,我尝试在我的 php 代码顶部设置它:
date_default_timezone_set("GMT");
我尝试使用date('Y-m-d H:i:s') 进行比较以找出差异,但它说的是“3 小时前”而不是 10 小时后。所以这肯定改变了事情。
但仍然不正确。
我已确认 date('Y-m-d H:i:s') 正在返回正确且当前的 GMT。所以这很好。
但用户输入日期已关闭。我怎么转换不正确?
再次编辑(包括根据 Salman A 的建议的一些测试结果):
2:55am - 我当前的当地时间 EST
date('Y-m-d H:i:s') 显示为 2011-07-21 06:56:43 - 这是正确的
美国东部标准时间凌晨 3:00 是我提交为 07/21/2011 03:00 am 的未来时间
这是我如何获得时间“转换”并将其提交到我的数据库:
$time = $_POST['time'];
//there is where im assuming it turns my EST time to the GMT equivalent.
$the_date = strtotime($time . ' GMT');
$utctime = gmdate('Y-m-d H:i:s',$the_date);
我希望我的函数会告诉我该事件是从现在开始 5 分钟,但它是休息时间。
只是为了确保用户提交的时间实际转换为 GMT 我显示 $utctime 并显示为 2011-07-21 03:00:00 - 这不是 08:00 或 07:00(我认为其中之一是格林威治标准时间)
那我该如何转换呢?
所以,我看到的是strtotime($time . ' GMT'); 似乎并没有将格林威治标准时间应用于我提供的当地时间。附带说明:somone 建议我的代码中有date_default_timezone_set("GMT");,所以我把它放在顶部。我应该删除它吗?但我注意到如果我删除它,格林威治标准时间不正确。所以这就是我离开它的原因。
【问题讨论】:
-
07/21/2011 01:30 am几点了?格林威治标准时间?服务器时区是什么?这些信息很重要:) -
我不确定您所说的“什么时间是 2011 年 7 月 21 日上午 1 点 30 分”是什么意思,因为这不是现在的时间吗?我的服务器时区是 America/Los_Angeles。
-
将您的服务器时间设置为 GMT 并使用 date()
-
你可以参考这个[问题][1] [1]:stackoverflow.com/questions/2095703/php-convert-datetime-to-utc谢谢。
-
我根据您的 cmets 更新了我的帖子。还是不行。