2013-04-20 16 views
12

Próbowałem to poszukać, ale nie mogłem znaleźć dobrego przykładu tego, co próbuję zrobić.Okrągłe datetime do ostatniej godziny

Mam wartości datetime w bazie danych MySQL, które należy zaokrąglić w dół, gdy ta wartość jest używana.

przykład wszystkie te wartości:

2013-04-20 07:14:42
2013-04-20 07:19:51
2013-04-20 07:37:26
2013-04-20 07:46:28
2013-04-20 07:59:44

należy zaokrąglić w dół do:

2013-04-20 07:00:00

I

2013-04-20 16:25:34

powinno być:

2013-04-20 16:00:00 itd ...

kod PHP, który pobiera wartość daty:

$d = strtotime($row["date"]); 

Tak, jak jej można zaokrąglić w dół wartość datetime?

+0

Are robi datetimes UTC? –

Odpowiedz

20

Spróbuj tego,

$date = "2013-04-20 16:25:34"; 
echo date("Y-m-d H:00:00",strtotime($date)); 

CodePad Demo.

+1

Dzięki :) Dostajemy pracę z tym: $ d = strtotime (data ("Y-m-d H: 00: 00", strtotime ($ row ["date"]))); – plexcell

1

można użyć date i strtotime funkcyjne aby to osiągnąć, wystarczy już zmienić minuty i sekundy accordling

$date = '2013-04-20 07:14:42'; 
    $newdate = date('Y-m-d H:00:00', strtotime($date)); 

    echo $newdate; 

ten wyświetli

2013-04-20 07:00:00 
1

To pisze datę na ciąg poprzez wyprowadzanie bezpośrednio 00:00 jak minutach i sekundach zamiast pisać i:s:

$date = date("Y-m-d H:00:00", $d); 

czy trzeba go jak uniksowy znacznik czasu? Następnie odetnij minuty i sekundy wyłączenia (zawsze ostatnie 5 bajtów) i zastąp je 00:00.

$d = strtotime(substr($row["date"], 0, -5)."00:00")); 
1

W tym przypadku prosty substr mógłby zrobić:

echo substr($date, 0, 13) . ":00:00"; 
2

strtotime() daje uniksowy znacznik czasu, który jest liczba sekund od 1970-01-01 00:00:00.

Co jeśli podzielono przez 3600 sekund (sekundy odpowiadające 1 godzinie) i zignorowano pozostałe (minuty i sekundy, które chcesz)?

$d = strtotime($row["date"]); 
$rounded_d = intval($d/3600); 
$formatted_rounded_d = date('Y-m-d H:i:s', $rounded_d) 
2

Skoro masz już timestamp Unix $d , najbardziej efektywnym sposobem jest użycie tylko funkcji arytmetycznych zamiast dat - szczególnie jeśli zamierzasz przechodzić przez zestaw wyników.

$hourTimestamp = $d - ($d % 3600); 

Operator modulo podaje pozostałą część, którą odejmujesz od znacznika czasu, aby uzyskać godzinę.

0

Dla tych, którzy podążają (znacznie później!): Carbon ma łatwy sposób to zrobić

$date = (new Carbon($row['date']))->minute(0)->second(0)->getTimestamp(); 
Powiązane problemy