2013-08-29 38 views
0

首先,我一直在掙扎兩天,不停地弄清楚我用這段代碼需要什麼東西,而且仍然停留在方塊中。PHP中的DateTime返回錯誤的值?

所以在這裏,我再次和我希望有人在這個問題上闡明我的頭正在爆炸。

我需要做的是在PHP中使用DateTime獲取兩個值之間的差異。

第一個值是00:00,這是一個設定值,永遠不會改變。

第二個值是$ offset/3600 * 1,它是兩個時區之間的時間差。

我使用的代碼是這樣的:

<?php 
if (0 > $offset) 
{ 
// set an object with the current date 
$date = new DateTime(); 
$date->setTime(00, 00); 

// the second date 
$date2 = new DateTime($offset/3600 * 1); 

// apply the diff() method, getting a DateInterval object ($diDiff) 
$diDiff = $date->diff($date2) ; 
} 
echo $diDiff->format("H:i"); 
?> 

上述回聲的代碼如下:H:i沒有別的!

我在做什麼錯?

在此先感謝。

編輯:

的$抵消來自這裏:

if(isset($_POST['submit'])) 
{ 
    //be sure to validate and clean your variables 
    $timezone1 = htmlentities($_POST['timezone1']); 
    $timezone2 = htmlentities($_POST['timezone2']); 

    //then you can use them in a PHP function. 
    function get_timezone_offset($origin_tz, $remote_tz) { 
    $timezone1 = new DateTimeZone($origin_tz); 
    $timezone2 = new DateTimeZone($remote_tz); 

    $datetime1 = new DateTime("now", $timezone1); 
    $datetime2 = new DateTime("now", $timezone2); 

    $offset = $timezone1->getOffset($datetime1) - $timezone2->getOffset($datetime2); 
    return $offset; 

} 

$offset = get_timezone_offset($timezone1, $timezone2); 

} 

?> 

timezone1和timezone2是,裏面還PHP時區的兩個下拉列表,它們是相同的。

像這樣:

<select name="timezone2" id="timezone2" class="timezone2"> 
         <?php 
        foreach($options as $key => $value) 
        { 
         echo '<option value="'. $key .'" label="'. $value .'">'.$value.'</option>'; 
        } 
        ?> 
<option value="Africa/Abidjan" label="Abidjan">Abidjan</option> 
<option value="Africa/Accra" label="Accra">Accra</option> 
<option value="Africa/Addis_Ababa" label="Addis Ababa">Addis Ababa</option> 
<option value="Africa/Algiers" label="Algiers">Algiers</option> 
<option value="Africa/Asmara" label="Asmara">Asmara</option> 

</select> 
+0

你在哪裏設置$ offset? – Tchoupi

+0

$ offset設置在頁面頂部,當用戶選擇兩個位置/時區時。 –

+0

首先,你有'if(0> $ offset)',你的意思是檢查'零是否大於$ offset'? – Jason

回答

2

隨着DateInterval對象,你have to prefix所有格式的字母與 「%」 字符。所以用途:

echo $diDiff->format("%H:%i"); 

快樂狩獵!

+0

好的Bri​​an,那種工作方式,但它返回的價值是錯誤的!即倫敦和紐約之間的時差($偏移)是-5小時。所以如果倫敦是00:00,紐約應該是19:00,但是現在用我的代碼顯示的價值是20:35。是因爲DST? –

+0

那可能是因爲你如何做時區。 $抵消來自哪裏? –

+0

通常,我所做的是將所有內容都轉換爲Unix時間,進行所需的計算,並將其輸出爲date()格式的時區。但是至少所有的calc都是服務器通用的。 –