2016-12-18 3 views
3

Ich versuche, das nächste Mittwochsdatum unter Verwendung new \DateTime('next week wednesday') zu erhalten. Es gibt jedoch 2016-12-19 00:00:00.000000 zurück, was Montag ist. Wieso ist es so? Wie bekomme ich das richtige Ergebnis?PHP Datetime `nächste Woche Mittwoch` gibt mir Montag

Ich habe versucht, es in einer PHP-Sandbox online zu reproduzieren, aber dort gibt es das korrekte Ergebnis zurück http://sandbox.onlinephpfunctions.com/code/7ab99fcfeffedc1ad01d7de9ed236ac273fe1bb3 Kann es etwas abhängig von meiner Umgebung sein?

Ich bin PHP 7 auf OSX läuft

PHP 7.0.11 (cli) (gebaut: 2. Oktober 2016 00.32.59) (NTS) Copyright (c) 1997-2016 Die PHP Gruppe Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies mit Xdebug v2.4.0, Copyright (c) 2002-2016, von Derick Rethans

enter image description here

+0

Vielleicht ist Ihre Systemzeit 2 Tage zurück? –

+2

@someone Die Serveruhr, die falsch ist, würde nicht erklären, das falsche Datum für Mittwoch zu bekommen ... –

+0

Aber warum würde es Montag zurückkommen, wenn es hinten war? Ich würde mindestens einen Mittwoch erwarten. 'new \ DateTime();' returns '2016-12-18 23: 15: 43.000000' = now. Ich denke, es ist richtig eingestellt. – simPod

Antwort

5

Diese appears to be a bug (möglicherweise this one, das auftritt, nur am Sonntag):

<?php 

var_dump(new \DateTime('Wednesday next week')); 

PHP-Versionen 5.6.23 bis 5.6.29 und 7.0.8 bis 7.1.0 Ausgabe 19. Dezember (ein Montag), während PHP-Versionen 5.0 bis 5.6. 22 und 7.0.0 bis 7.0.7 kehren am 28. Dezember (ein Mittwoch) zurück.

Ich sehe keine Erwähnung verwandter Änderungen in den Changelog-Einträgen für PHP 5.6.23 oder 7.0.8.

+0

zu reproduzieren Ah, sieht aus wie eine Antwort, danke. Aber ich frage mich, wie ich damit umgehen soll ... IMO, es ist ziemlich ernst: D – simPod

+0

@simPod erwarten Sie, dass Software natürliche Sprache interpretiert. ein wenig mehr Code und Sie könnten mit "Mittwoch nächste Woche" –

+0

@simPod nur aktualisieren Sie Ihre PHP auf die neueste Version –

0

ich die gleichen Ergebnisse hier, scheint in der Tat ein 'nächste Woche' Dingen zu sein:

$date = new \DateTime('next week wednesday'); 
print_r($date); 

DateTime Object 
(
    [date] => 2016-12-19 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 

Rewriting scheint zu funktionieren, je nachdem, was Sie wollen:

$date = new \DateTime('wednesday'); 
print_r($date); 

DateTime Object 
(
    [date] => 2016-12-21 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 

oder

$date = new \DateTime('wednesday'); 
$date->add(new \DateInterval('P1W')); 
print_r($date); 

DateTime Object 
(
    [date] => 2016-12-28 00:00:00.000000 
    [timezone_type] => 3 
    [timezone] => Europe/Berlin 
) 
+0

werde ich dies mit Datumsintervall versuchen, aber nächsten Sonntag: D danke – simPod

Verwandte Themen