Mam następujący kod:PHP Data różnica
$dStart = new DateTime('2013-03-15');
$dEnd = new DateTime('2013-04-01');
$dDiff = $dStart->diff($dEnd);
echo $dDiff->days;
nie wiem dlaczego ja dostaję 6015 jako wynik.
Mam następujący kod:PHP Data różnica
$dStart = new DateTime('2013-03-15');
$dEnd = new DateTime('2013-04-01');
$dDiff = $dStart->diff($dEnd);
echo $dDiff->days;
nie wiem dlaczego ja dostaję 6015 jako wynik.
Spróbuj jak
$dStart = strtotime('2013-03-15');
$dEnd = strtotime('2013-04-01');
$dDiff = $dEnd - $dStart;
echo date('H:i:s',$dDiff);
lub jak na kodzie spróbuj
$dDiff = $dStart->diff($dEnd);
$date->format('d',$dDiff);
echo $dDiff->days;
jeśli chcesz diff w dniach spróbować z tym również
echo floor($dDiff/(60*60*24));
To powraca "01:01:00" Spodziewam się, że dostanę różnicę w dniach między 2 datami – carlosduarte
spróbuj edytować .. ?? plz – Gautam3164
Masz to ... @ carlosduarte .. ?? – Gautam3164
Spróbuj this-
$dStart = new DateTime('2013-03-15');
$dEnd = new DateTime('2013-04-01');
$dDiff = $dStart->diff($dEnd);
echo $dDiff->format('%d days')
Sprawdź PHP
Proszę sprawdzić demo link
Powraca +6015 dni również musi być błędem wersji PHP – carlosduarte
@ carlosduarte: zaktualizowany post i dodany link do phpfiddle: http://phpfiddle.org/main/code/7dq-mb7 –
W tym przykładzie dodajesz dowolną datę ...Powiedzmy, że zmienimy to na 2015, to powraca 17 dni zawsze – utkarshk
użycie tego
$datetime1 = date_create('2013-03-15');
$datetime2 = date_create('2013-04-01');
$interval = date_diff($datetime1, $datetime2);
echo $interval->format('%R%a days');
Powraca +6015 dni może być błędem php? Wersja PHP 5.3.1 – carlosduarte
może być powracającym błędem dla twojej wersji php. Testowałem i wróciłem +17 dni. –
Nie mogę zrozumieć, co się dzieje z PHP, czy echo (1363305600 - 1364857200)/(60 * 60 * 24) zwraca -A.9583333333333 – carlosduarte
Wolę coś takiego:
function days_diff($first_date, $second_date)
{
$later = new DateTime($second_date);
$then = new DateTime($first_date);
return $later->diff($then)->format('a');
}
Tak, jest to jedyne rozwiązanie, które działa w PHP w wersji 5.3.1 – carlosduarte
To nie zadziała, jeśli różnica będzie większa niż 1 miesiąc. DateInterval przewróci się i zwiększy "m", resetując 'd' z powrotem do 0. Obecnie, musisz użyć' $ interval-> format ('a') ', aby uzyskać całkowitą liczbę dni między dwoma dniami (jeśli spodziewasz się zakres kiedykolwiek powyżej 1 miesiąca) –
@ColinMorelli Dzięki! Zastosowałem zmianę. Używałem tej funkcji bez problemu, ale moja sprawa była zawsze w ciągu miesiąca. –
mam te same 6015 dni na PHP 5.3.0 i znalazł rozwiązanie z wykorzystaniem var_dump()
. Mój dokładny kod jest tutaj:
$timestring = "Thu, 13 Jun 2013 14:05:59 GMT";
date_default_timezone_set('GMT');
$date = DateTime::createFromFormat('D, d M Y G:i:s T', $timeString);
$nowdate = new DateTime("now");
$interval = $date->diff($nowdate);
Teraz gdybym zrobić var_dump($interval)
, wynik jest:
object(DateInterval)#5 (8) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(19)
["i"]=>
int(45)
["s"]=>
int(33)
["invert"]=>
int(0)
["days"]=>
int(6015)
}
Więc godzin (h
), mikroskopy (i
) i sekundy (s
) są ustawione poprawnie, ale jest jeszcze inna właściwość days
, która pozostaje stała przy 6015 i to jest to, co inni robią jako błąd. Cóż, nie mogę zrozumieć, skąd bierze się ta wartość. Ponownie, zgodnie z instrukcją PHP dla DateInterval
pod http://www.php.net/manual/en/class.dateinterval.php, próbowałem uzyskać dostęp do nich jako właściwości obiektu i wszystko poszło absolutnie dobrze.
Stąd uzyskać dokładny wynik przez:
echo (string) $interval->d." days ago";
Co się dzieje, jeśli przesunięcie terminu o jeden? Spróbuj na przykład "2013-03-16" i "2013-04-02". – cwallenpoole
Jeśli ustawię 2013-03-16 i 2013-04-02 otrzymam tę samą wartość 6015 – carlosduarte
Znalazłem raport o błędzie # 51184 https://bugs.php.net/bug.php?id=51184 – carlosduarte