2012-02-27 11 views
6

Mam tutaj problem.php - Godzina wcześniej niż podana Datetime

Podobno mam tego rodzaju datetime.

 

$date = strtotime($date); 
 

muszę to być konwertowane do formatu Unix timestamp ale jedna godzina earlier..I próbował

 

$date = strtotime($date-86400) 
 

, ale wydawało mi się, że jest źle. Wróciło 0, kiedy zakradłem się do stołu.

Jaki jest właściwy sposób, aby to osiągnąć?

Dzięki.

+0

Istnieje 3600 sekund w ciągu jednej godziny i 86400 sekund w ciągu jednego dnia. Musisz odjąć 3600 sekund. 'strtotime ($ date) - 3600;' – Cheery

Odpowiedz

4

strtotime wyświetli znacznik czasu unix Twojej daty. Z tego datownika, następnie odjąć godzina:

$date = strtotime($date) - 3600; // 3600 = 60 * 60 

Jeśli zadzwonisz strtotime($date - 3600), to jak uzyskanie czasu -3600 (np strtotime(-3600)), który sprawia, że ​​nie ma sensu, ponieważ strtotime oczekuje ciąg jako pierwszy argument.

+2

Istnieje 3600 sekund w ciągu jednej godziny i 86400 sekund w jeden dzień. – Cheery

+0

Ach tak ... Byłem totalnie w rozsypce ... Nie powinienem liczyć 60 * 60 * 24 ... to daje mi sekundy w ciągu dnia ... głupie mnie :( – foxns7

5

Można zrobić:

 

$testDateStr = strtotime($date); 
$finalDate = date("Y-m-d H:i:s", strtotime("-1 hour", $testDateStr)); 
 

Nadzieja pomaga

+0

Podczas gdy ta odpowiedź jest dość samo- Objaśnienia do tych, którzy są zaznajomieni z 'date()' i 'strtotime()', To poprawiłoby twoją odpowiedź z pewnym wyjaśnieniem – mickmackusa

3

86400 sekund jest jeden dzień, a nie jedną godzinę.

Dane wyjściowe strtotime() to uniksowy znacznik czasu. 3600 sekund wcześniej jest ten znacznik czasu minus jedna godzina. Więc:

$date = strtotime($somestring); 

$hourago = $date - 3600; 

lub w zależności od oryginalnego formatu $ someString:

$hourago = strtotime($somestring . " - 1 hour"); 

I nie zapomnij o date_default_timezone_set()

1

Spróbuj tego zapytania

$query= "insert into yourTable(otherValues, date) 
values (otherFields, DATE_ADD(NOW(),INTERVAL -1 hour)) 

Zastosowanie DATE_ADD wstawić wartość daty, która jest o 1 godzinę mniejsza niż bieżąca godzina.

+0

Zwrócono uwagę, ponieważ OP nie pyta o rozwiązanie 'mysql' ani' INSERT'. powinno również zawierać wyjaśnienie, aby czytelnicy mogli w pełni zrozumieć/skorzystać z odpowiedzi/podejścia. – mickmackusa

0

Nikt nie oferował jeszcze obiektu obiektowego DateTime, więc zrobię to. Jest to najnowocześniejsza metoda przetwarzania datetime i nie wymaga obliczania minut & sekund.

Zawsze lubię opuszczać deklaracje strefy czasowej, aby wszystko było definitywne. Czas letni to zwykle kwestia manipulacji datetime, ale prawdopodobnie w tym przypadku jest OK. Możesz zmienić strefę czasową dla swojej sprawy.

PHP Manual linki:

Code (w tym sformatowanym ti ja dla porównania) Demo Link:

$now=new DateTime('NOW UTC'); 

$now_stamp=$now->getTimestamp(); 
$formatted_now=$now->format("Y-m-d H:i:s"); 
echo "$now_stamp ($formatted_now)\n"; 

$hour_ago=$now->modify('-1 hour'); 
$hour_ago_stamp=$hour_ago->getTimestamp(); 
$formatted_hour_ago=$hour_ago->format("Y-m-d H:i:s"); 
echo "$hour_ago_stamp ($formatted_hour_ago)"; 

wyjściowa:

1492687193 (2017-04-20 11:19:53) 
1492683593 (2017-04-20 10:19:53) 
Powiązane problemy