2015-08-21 14 views
12

Mam dziwny problem. Kiedy robię strtotime, nie biorę pod uwagę godzin, które są częścią pierwotnej daty, i zawsze wracam o północy. Próbowałem badać, ale nie mogłem znaleźć niczego konkretnego.Stritotime PHP wraca zawsze o północy

Czy jest coś, czego mi brakuje?

$original_date = "2015-08-07 02:00:00"; 
$next_date = date('Y-m-d H:i:s', strtotime("monday this Week +1 week", strtotime($original_date))); 

Zwraca $next_date jak 2015-08-14 00:00:00

+1

Nie jestem pewien, jak to poprawić, ale dając 'strtotime' konkretny dzień jak poniedziałek ustawia go do poniedziałku 00:00:00 a następnie pozostałe obliczenia użyć. – AbraCadaver

Odpowiedz

5

Spróbuj tego należy dodać czas, który chcesz pobrać w przyszłym data,.

$original_date = "2015-08-07 02:00:00"; 
echo $next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", strtotime($original_date))); 
+0

w rzeczywistości, gdy mówiłem w poniedziałek w poniedziałek, to zajmie tylko datę i doda do siebie 00:00:00 w środku nocy, więc właśnie dodaliśmy czas w strtotime. –

+0

To działa! Czy radziłbyś zawsze dodawać godzinę jako koc ochronny? – Kitara

+0

@Kitara tak powinieneś zawsze dodawać, gdy chcesz zachować swoje godziny, minuty i sekundy. –

3

monday this week +1 week zakłada szukasz północy w poniedziałek w tygodniu przeszedł w czasie. Jeśli chcesz zachować godzinach część czasu, można dołączyć go do formatu date ponieważ powinien być zawsze taki sam, jak w $original_date

date('Y-m-d ' . date('H:i:s', strtotime($original_date)), strtotime("monday this Week +1 week", strtotime($original_date))); 
+0

Cześć, to nie działało dla mnie wyjście było 2015-08-10 19:33:35. Modyfikuję na bieżąco ("Y-m-d", strtotime ("poniedziałek w tym tygodniu +1 tydzień", strtotime ($ original_date))). " ".date (" H: i: s ", strtotime ($ original_date)) i zadziałało. – Kitara

+0

@Kitara, który działa również, brakowało mi 'strtotime' wywołania – FuzzyTree

3

Podczas korzystania monday w strtotime jesteś resetowania czasu z powrotem do 00:00:00. Będziesz musiał wyraźnie przekazać czas w swoim date lub strtotime, aby uzyskać pożądane zachowanie. Zobacz artykuł o podobnym problemie: this same question.

$next_date = date('Y-m-d H:i:s', strtotime("monday this Week +1 week " . date('H:i:s', strtotime($original_date)), strtotime($original_date))) 
3
$date = strtotime('2018-08-14 02:00:00'); 
$next_date = date('Y-m-d H:i:s', strtotime("monday this Week 02:00:00 +1 week", $date)); // 2018-08-20 02:00:00