2014-02-27 149 views
1

我有datetime對象:日期時間:: DIFF返回不正確的1小時差異

object(DateTime)[561] 
    public 'date' => string '1970-01-01 11:55:00' (length=19) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'Europe/Vilnius' (length=14) 

object(DateTime)[563] 
    public 'date' => string '2014-01-29 11:55:00' (length=19) 
    public 'timezone_type' => int 3 
    public 'timezone' => string 'Europe/Vilnius' (length=14) 

和令人驚訝的DateTime :: DIFF這些回報:

object(DateInterval)[565] 
    public 'y' => int 44 
    public 'm' => int 0 
    public 'd' => int 28 
    public 'h' => int 1 
    public 'i' => int 0 
    public 's' => int 0 
    public 'weekday' => int 0 
    public 'weekday_behavior' => int 0 
    public 'first_last_day_of' => int 0 
    public 'invert' => int 0 
    public 'days' => int 16099 
    public 'special_type' => int 0 
    public 'special_amount' => int 0 
    public 'have_weekday_relative' => int 0 
    public 'have_special_relative' => int 0 

任何想法,其中該1小時差異可能來自? 使用PHP 5.4.25 在此先感謝傢伙!

+1

請發表您的代碼,以便我們可以檢查 –

+0

我已經發現了這個問題,同時挖掘更深的後使用Zend \ Form \ Element \ Date元素與Zend \ Validator \ DateStep進行問題。日期輸入字段有一個選項,用於設置設置爲** 1天**的日期輸入的**最小**步驟。輸入格式爲Y-m-d,並且由JS日曆選擇,因此它自然有1天的步驟。但表單不驗證,而DateStep驗證程序在日期之間檢測到1小時的更改,而最小步驟爲1天。此外,使用PHP 5.3的WAMP似乎也可以正常工作。 – nesinervink

+1

無論如何,對於PHP 5.4+ [我無法複製](http://3v4l.org/mDiEU)那種情況。 –

回答

1

的比較時間當地,似乎出現了一個歷史性的時區爲Europe/Vilnius從UTC + 3H於1970年UTC + 2H變化在2014年:

$ export TZ="Europe/Vilnius" 
$ irb 
irb(main):001:0> Time.mktime(1970,1,1) 
=> Thu Jan 01 00:00:00 +0300 1970 
irb(main):002:0> Time.mktime(2014,1,1) 
=> Wed Jan 01 00:00:00 +0200 2014 

的變化似乎有時會出現回1990年

語言是紅寶石,但它使用相同的操作系統後臺對時間的功能和時區數據作爲PHP

+0

謝謝!確實是這個原因。具體的+02:00時區是在01/01/2003引入的。 – nesinervink

0

這種差異不秀,在這裏,用PHP 5.3.3 ...:

$ php -v 
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies 

<?php 
    date_default_timezone_set("Europe/Vilnius"); 
    $datetime1 = new DateTime('1970-01-01 11:55:00'); 
    $datetime2 = new DateTime('2014-01-29 11:55:00'); 
    $interval = $datetime1->diff($datetime2); 
    print_r($interval); 
?> 

DateInterval Object 
(
    [y] => 44 
    [m] => 0 
    [d] => 28 
    [h] => 0 
    [i] => 0 
    [s] => 0 
    [invert] => 0 
    [days] => 16099 
) 
+0

正如我在原帖的回覆中提到的那樣,它似乎也適用於使用PHP 5.3的WAMP機器。 – nesinervink

+0

對不起,我回答之前比你的評論... :-) – MarcoS

+0

然而,正如Alma Do顯示(http://3v4l.org/mDiEU),它不會發生在最新的PHP ... – MarcoS