服务器时间 - 让我疯狂:-)

时间:2013-07-24 09:13:37

标签: php datetime

好的,所以我在丹佛有一台服务器,在新西兰有一个用户。我知道关于用户的一切(时区等),并且通过程序他们要求提前发生事情 - 让我们说在2013年8月5日上午11:30。我有一个每15分钟运行一次的CRON作业并询问数据库是否有任何请求等待接下来的15分钟,但我如何将他们的存储时间转换为等效的服务器。

  1. 我为计算设置了默认时区:date_default_timezone_set('America/Denver')

  2. 我现在在服务器上花时间把它变成纪元:strtotime(date('Y-m-d H:i:s'))

  3. 我添加15分钟来创建范围:$forward15 = strtotime('now +15 minutes')

  4. 我从数据库中获取用户选择的日期(及其时区):2013-08-05 11:30:00

  5. 现在怎样?如果我将其转换为epoch,它将只是该日期的服务器版本。

2 个答案:

答案 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);
?>