2016-05-10 7 views
1

Wenn ich strtotime("2016-05-06 15:00:00 +15.98 hours") anrufen, würde ich 2016-05-07 06:58:48 erwarten, aber stattdessen bekomme ich 2016-05-10 02:00:00. Was gibt?PHP Warum gibt mir strtotime den falschen Tag mit YYYY-MM-DD HH: MM: SS +15 Stunden?

können Sie testen, hier selbst:

  1. Verwendung strtotime: http://php.fnlist.com/date_time/strtotime
  2. konvertieren Ausgabe int Zeitstempel: http://www.epochconverter.com/
+1

Es könnte nur ganze Zahlen annehmen z.B. '16' anstelle von '15 .98' –

+1

Wahrscheinlich interpretiert es +15 als Zeitzonen-Offset. Verlassen Sie sich nicht auf 'strtotime', um solche komplexen Sätze zu analysieren, es ist keine Magie und es wird nicht jedes Mal alles korrekt sein. – deceze

+2

Anmerkung: 'gmdate ('Ymd H: i: s', strtotime ('+ 1,5 Stunden', 0));' ergibt '1969-12-31 22: 00: 00' (dh +1,5 Stunden ist Windung bis zu -2 Stunden), so dass hier definitiv etwas nicht-intuitives Parsing stattfindet. – ceejayoz

Antwort

3

dies stattdessen versuchen:

//60 * 60 * 15.98 = 57,528 seconds 
$add = round(60 * 60 * 15.98); 

$timestamp = strtotime("2016-05-06 15:00:00") + $add; 

$dt = date("Y-m-d H:i:s", $timestamp); 

echo $dt; //2016-05-07 06:58:48 

Dies berechnen bis 2016-05-07 06:58:48

Warum ist es falsch hinzugefügt die 15,98 Stunden ist komplexer. Für dieses Problem wurde von PHP ein Fehler gemeldet, obwohl Floats in der Datumsformatierung in PHP derzeit nicht unterstützt werden.

//60 * 60 * 15.98 = 57,528 seconds 
$timeToAdd = round(60 * 60 * 15.98); 

Und dann rufen strtotime() wie: Da Sie nicht direkt schwimmt in Datumsformatierung verwenden können, müssen Sie so etwas wie „1,5 Jahre“ mit „18 Monate“ oder Rechnen vor und um es so ersetzen im obigen Beispiel

$date = strtotime("2016-05-06 15:00:00") + $timeToAdd; 
+0

Dies ist in der Tat, wie man es umgehen kann, aber OP fragt * warum * was ich denke, ist eine interessante Frage. Ich habe jedoch nicht runtergestimmt. – ceejayoz

+0

@ceejayoz Ich habe versucht, eine Lösung zu geben, obwohl es ein seltsames Ereignis ist und eine unerwartete Ausgabe ist. Ich habe nicht viele Ideen, warum das so ist. Vielleicht weil es ein Float ist und kein int das damit zu tun hat. –

3

Floats sind nicht in Datumsformatierung in PHP unterstützt

Es scheint, dass Sie nicht zusätzlich in strtotime auf diese Weise tun können. Darüber hinaus hat ein Problem für Komma worden here berichtet

Was können Sie tun, ist die Zeit, in zwei separate Variable hinzufügen wie William Antwort

+0

Guckte nur auf den gleichen Fehler und wollte es gerade posten; Ich denke, es ist jetzt fair zu sagen ** Floats funktionieren nicht in Datumsformatierung ** in PHP. –

Verwandte Themen