2013-10-22 66 views
1

我正在嘗試根據一天中的時間來旋轉電話號碼。如果時間是上午8點到下午5點,它應該顯示888號碼。如果是晚上5點以後,但是早上8點,它應該顯示777號碼。這是我迄今得到的,但它只顯示了777的數字作爲我的輸出,即使時間在上午8點到下午5點之間。如何在PHP中按時間旋轉文本字符串?

$dayPhoneNumber = "1-888-888-8888"; 
$nightPhoneNumber = "1-777-777-7777"; 
$currentPhoneNumber = ""; 

$nowHour = date("H"); 

$startHour = 8; 
$endHour = 17; 

if ($nowHour >= $startHour && $nowHour <= $endHour){ 
echo $dayPhoneNumber; 
} else { 
echo $nightPhoneNumber; 
} 
+0

適合我 - 你是否考慮了服務器的本地時區? –

+3

你確定你的服務器正在返回正確的小時嗎?日期(「H」)將使用服務器時鐘而不是本地PC時鐘返回小時。 – Robbert

+0

這不是解決方案,但'date('H')'返回一個零填充數字,00-> 23。你應該使用'date('G')',它不是零填充,0-> 23。 –

回答

1

我的猜測是你的服務器的時間和你電腦的時間不一樣。如果您使用託管解決方案,您的服務器可能會遍佈全國或不同的大陸,這意味着時間會有所不同。

如果您只需要擔心一個位置而不是最終用戶的位置,那麼這應該很容易。如果你在美國

date_default_timezone_set("America/Los_Angeles"); 
$hour = date("H", time()); 

西海岸這裏是時區的列表:http://www.php.net/manual/en/timezones.php

如果您需要了解最終用戶的時區確定小時的時候,這裏的問題進行了洽談這樣做:How to get client's timezone?

如果你處理的時區的問題,你還可以嘗試使用UTC檢索時間,然後加上或減去小時的任何數字去正確的時區:get UTC time in PHP

+0

基於客戶時區的顯示幾乎肯定不是你想要的,因爲管理電話線的工作人員的小時數不取決於客戶的時區。也就是說,如果東海岸的運營商在下午5點回家,那麼你不想用西海岸客戶的時區告訴他們運營商在那裏還有3個小時。 –

+0

好點。在這種情況下,您需要設置商戶位置的時區。我仍然認爲服務器時間是主要問題。 – Robbert

+0

同意。服務器可能默認爲UTC,所以OP應該只需要爲本地區域運行'date_default_timezone_set()'。 –