0

好的,所以我在丹佛有一台服务器,用户在新西兰。我知道有关用户(时区等)的所有信息,并通过程序他们要求提前发生一些事情 - 比如说 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

怎么办?如果我将其转换为纪元,它将只是该日期的服务器版本。

4

2 回答 2

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 的时间,我们只需从 time() 中减去偏移量,而不是像下面的示例中那样添加时间,我们将获得 GMT-4 的时间

<?php 
  $offset=4*60*60; //converting 5 hours to seconds.
  $dateFormat="d-m-Y H:i";
  $timeNdate=gmdate($dateFormat, time()-$offset);
?>
于 2013-07-24T09:22:18.887 回答
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;
?>
于 2013-07-24T09:18:51.420 回答