好的,所以我在丹佛有一台服务器,在新西兰有一个用户。我知道关于用户的一切(时区等),并且通过程序他们要求提前发生事情 - 让我们说在2013年8月5日上午11:30。我有一个每15分钟运行一次的CRON作业并询问数据库是否有任何请求等待接下来的15分钟,但我如何将他们的存储时间转换为等效的服务器。
我为计算设置了默认时区:date_default_timezone_set('America/Denver')
我现在在服务器上花时间把它变成纪元:strtotime(date('Y-m-d H:i:s'))
我添加15分钟来创建范围:$forward15 = strtotime('now +15 minutes')
我从数据库中获取用户选择的日期(及其时区):2013-08-05 11:30:00
现在怎样?如果我将其转换为epoch,它将只是该日期的服务器版本。
答案 0 :(得分:0)
新解决方案见下文
如果你知道时区,你可以简单地“添加”它到你的时间。
例如:
服务器时间:01/01/01 00:00 用户想要的时间:01/01/01 01:00 用户的时区:GMT - 5
得到时间(01/01/01 01:00)并添加+5 => 01/01/01 06:00
所以:你的脚本需要在01/01/01 06:00
执行(转换为需要的时间戳)
添加了一些PHP来演示
<?php
$servertime = time(); //timestamp of 01/01/01 00:00
$usertime = "01/01/01 06:00";//database
$userUTC = "-5";//database
strreplace($userUTC, "-", "+";
$replacetext = $userUTC . " days";
$usertime = strtotime($replacetext, $usertime);//now usertime is in your local timezone
$crontime = date("d/m/Y H:i");//the time you want the script to be executed
?>
我只是假设时区保存为“-5”而不是欧洲/阿姆斯特丹只是告诉我我是不是错了。
编辑14:37
我认为这可能是更好的解决方案!
<?php
$usertime = "01/01/01 06:00";
$userUTC = "-5";
$userdate = $usertime . " " . $userUTC;
$usertimestamp = strtotime($userdate);//now you have the timestamp with correct timezone
$crontime = date("d/m/Y H:i", $usertimestamp);//formatted to the right date
echo $crontime;
?>
编辑:25-07-2013 14:26
适合您数据库的新解决方案:
<?php
$usertime = "01/01/01 06:00";
$userUTC = "Pacific/Auckland";//get from database
$userdate = $usertime . " " . $userUTC;
$usertimestamp = strtotime($userdate);//now you have the timestamp with correct timezone
$crontime = date("d/m/Y H:i", $usertimestamp);//formatted to the right date
echo $crontime;
?>
答案 1 :(得分:0)
服务器在这里GMT时区非常简单,可以获得任何时区的时间和日期。这是通过time()和gmdate()函数完成的。 gmdate()函数通常给我们GMT时间,但通过使用time()函数做一个技巧我们可以获得GMT + N或GMT-N意味着我们可以获得任何GMT时区的时间。
例如,您必须有时间参加GMT + 5,我们将按照
进行操作<?php
$offset=5*60*60; //converting 5 hours to seconds.
$dateFormat="d-m-Y H:i";
$timeNdate=gmdate($dateFormat, time()+$offset);
?>
现在,如果您必须获得GMT-5的时间,我们将从时间()中减去偏移,而不是像下面的示例中那样添加时间,我们将获得GMT-4的时间
<?php
$offset=4*60*60; //converting 5 hours to seconds.
$dateFormat="d-m-Y H:i";
$timeNdate=gmdate($dateFormat, time()-$offset);
?>