PHP中的日期时间计算

时间:2013-01-07 05:37:32

标签: php datetime timezone

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

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

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

那么将时间设置为00:00 AM的方式是什么,或者将当前时间剩余的时间设置为00:00 AM。有没有程序?

[新更新]

好的我得到了解决方案

$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在法国:) 我使用Minutes而不是添加小时,因为分钟会给你更准确的结果而不是小时。

多数民众赞成,希望它会帮助你们的人

4 个答案:

答案 0 :(得分:1)

您可以随时使用date_default_timezone_set()来设置时区:

date_default_timezone_set('Europe/London');

但是如果你不想这样做,你可以通过这样的方式得到00:00 am(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);

答案 1 :(得分:0)

假设您的服务器落后于所需时区5小时,您可以执行此类操作。

$date = date('h:i:s A', strtotime($today)+(60*60*5)); // $today is today date

答案 2 :(得分:0)

在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)都有助于你在指定时间设置任何可能的时区和触发事件。

答案 3 :(得分: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)

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

有关详细信息,请参阅DateTimeDocs manual