2013-01-07 83 views
2

我陷入了php中的時間計算問題。我會告訴你我的例子:PHP中的日期時間計算

我在網絡服務器上託管了一個問候網站,這臺服務器在印度。這意味着服務器正在印度時區運行。現在讓我們想想今天的日期是'01/01/2013',並且我想在02/01/2013的第二天早上0:00(中午12:00)向英國發送問候語。如果我提交我的賀卡,我的PHP腳本將在印度時區發送此卡,這意味着在印度12AM時腳本將運行併發送卡,英國將在確切時間的5小時前收到此卡。我知道如何獲得我使用時間偏移來獲得時間的任何國家的正確時間。

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

那麼什麼是時間設定爲00:00 AM,有多少留在當前時間00:00 AM小時的方式。有沒有什麼程序?

[NEW UPDATE]

行我得到了解決

$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'))); 

IN SIMPLE WORD:
(19800-3600)/ 60 = 270(分鐘)

270分鐘,意思是4.5小時
所以當印度時間2013年1月20日00:00
然後,它會2013年1月19日19:30:00在法國

如果印度時間是2013年1月20日04:30它將2013-01-20 00:00在法國:)
我用Minutes而不是增加小時,因爲分鐘會給你更準確的結果,而不是小時。

多數民衆贊成它,希望它會幫助你的人

+0

如果您發現以下某個解決方案有幫助,請將其標記爲答案。 – TryHarder

+0

好吧,對不起,我沒有更新這..檢查這個解決方案的問題詳細信息 –

回答

1

你總是可以通過使用date_default_timezone_set()這樣設置時區:

date_default_timezone_set('Europe/London'); 

但是,如果你不想做,你可以得到時間戳00:00 AM(上午12點)做這樣的事情:

$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); 
+0

其實我不能使用date_default_timezone_set,因爲正如我所說即時創建電子問候網站,我會用CRONJOB作爲我的問候發送者,我的數據庫將有國家混合數據,我想計算日期,然後將其保存在我的數據庫中。意思是在服務器時間的基礎上將服務器時間換算爲另一個國家時間,當服務器時間爲5:00(IST)時,英國時間將爲00:00(12AM)...對英語不滿意:P可以理解我想要的內容說....無論如何,我會嘗試你的代碼並回復你。 –

+0

對不起,我不知道設置時區是否適用於你,但我想我會繼續並建議它,因爲如果它能工作,它會爲你節省很多代碼。如果您需要幫助,請告訴我,我很樂意爲您提供幫助。 – SISYN

+0

謝謝你,當我解決了我的問題,我會在這裏發佈該方法,這也幫助其他人。 ;) –

0

你爲什麼不只是設置要在運行時在你的卡腳本中使用的時區?

在腳本的頂部...

date_default_timezone_set('Europe/London'); 
0

你可以做這樣的事情假設你的服務器是背後所需的時區5小時。

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

英國實際上是5小時30分鐘落後印度,而不是5個小時。 – SISYN

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)都應該有助於您在指定時間設置任何可能的時區和觸發事件。

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瞭解更多信息。