2

我陷入了php中时间计算的问题。我会用我的例子告诉你:

我在网络服务器上托管了一个问候网站,该服务器位于印度。这意味着服务器在印度时区运行。现在让我们认为今天的日期是“01/01/2013”​​,我想在第二天 02/01/2013 早上 0:00(12:00AM)向英国发送问候。如果我提交我的贺卡,我的 php 脚本将按印度时区发送这张贺卡,这意味着当印度凌晨 12 点时,脚本将运行并发送贺卡,英国将在确切时间前 5 小时收到这张贺卡。我知道如何获得我使用时间偏移来获得时间的任何国家的正确时间。

$time = strtotime('H:m:s'.(time() - (serverOffset - ukOffset)))

那么将时间设置为 00:00AM 或当前时间剩余多少小时到 00:00AM 的方法是什么。有什么手续吗?

[新更新]

好的,我得到了解决方案

$SERVER_OFFSET = 19800; //INDIA +5.50
$PARIS_TZ_HOUR = 1.0; //FRANCE-PARIS +1.00
$NEW_OFFSET = ($PARIS_TZ_HOUR * (60*60)); //new_offset 3600
$MINUTES = ($SERVER_OFFSET - $NEW_OFFSET)/60; 

// Lets date is: 2013-01-20 00:00:00
echo date('Y-m-d H:i:s', strtotime($MINUTES.'minutes', strtotime('2013-01-19')));  

简单来说:
(19800-3600)/60 = 270(分钟)

270 分钟,这意味着 4.5 小时
所以当印度时间是 2013-01-20 00:00
那么它将是 2013-01-19 19:30:00 在法国
或者
如果印度时间是 2013-01-20 04:30 它会2013-01-20 00:00 在法国 :)
我使用分钟而不是添加小时,因为分钟会给你更准确的结果而不是小时。

就是这样,希望对大家有所帮助

4

5 回答 5

1

您始终可以使用 date_default_timezone_set() 设置时区,如下所示:

date_default_timezone_set('Europe/London');

但如果您不想这样做,您可以通过执行以下操作获取 00:00am (12am) 的时间戳:

$ukOffset = 60*60*5.5; // UK is 5 hours 30 mins behind India's time
$midnight = strtotime('7 January 2013');
$midnightUK = $midnight-$ukOffset;

或者,如果您想查看从现在到现在还剩下多少时间,您可以执行以下操作:

$ukOffset = 60*60*5.5;
$midnight = strtotime('7 January 2013');
$midnightUK = $midnight-$ukOffset;
$difference = $midnightUK - (time()-$ukOffset);
于 2013-01-07T05:48:25.983 回答
1

在 PHP 中,有不止一种方法可以实现您正在寻找的东西。

1)如果您特别寻找英国,您可以使用gmdate功能。http://php.net/manual/en/function.gmdate.php

2) 使用 DateTime 类的 setTimezone 方法。http://php.net/manual/en/datetime.settimezone.php

3) 使用 date_default_timezone_set 方法。http://php.net/manual/en/function.date-default-timezone-set.php

您将在 php 在线手册中找到很好的示例,并且 2) 和 3) 都应该有助于您设置任何可能的时区并在指定时间触发事件。

于 2013-01-07T06:02:57.313 回答
0

你为什么不在你的卡片脚本中设置你想在运行时使用的时区呢?

在脚本的顶部...

date_default_timezone_set('Europe/London');
于 2013-01-07T05:46:13.487 回答
0

假设您的服务器比所需时区晚 5 小时,您可以执行类似的操作。

$date = date('h:i:s A', strtotime($today)+(60*60*5)); // $today is today date
于 2013-01-07T05:48:03.490 回答
0

使用 PHP 的 DateTime 类使这个问题变得微不足道。我设置了这段代码来演示:-

date_default_timezone_set('Asia/Kolkata');//As my dev machine is on GMT, you probably don't need this.
$date = new DateTime();
var_dump($date);
$date->setTimezone(new DateTimeZone('Europe/London'));
var_dump($date);

输出:-

object(DateTime)[1]
  public 'date' => string '2013-01-07 19:44:08' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Asia/Kolkata' (length=12)
object(DateTime)[1]
  public 'date' => string '2013-01-07 14:14:08' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'Europe/London' (length=13)

基本上,这表明您可以使用服务器时间并将其直接与英国时间进行比较,以便在正确的时间发送您的消息。

有关详细信息,请参阅DateTime文档手册

于 2013-01-07T14:36:03.207 回答