2013-04-20 19 views
12

Ho provato a cercarlo ma non sono riuscito a trovare un buon esempio di ciò che sto cercando di fare.Round datetime to last

I valori datetime nel database MySQL devono essere arrotondati quando il valore è in uso.

esempio, tutti questi valori:

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

devono essere arrotondati verso:

2013-04-20 07:00:00

E

2013-04-20 16:25:34

dovrebbe essere:

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

codice PHP che ottiene valore di data:

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

Quindi, come la sua possibile arrotondare per difetto il valore datetime?

+0

Are non datetimes UTC? –

risposta

20

Prova questo,

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

CodePad Demo.

+1

Grazie :) Funziona con questo: $ d = strtotime (data ("Y-m-d H: 00: 00", strtotime ($ row ["date"]))); – plexcell

1

è possibile utilizzare date e strtotime Funzione per raggiungere questo obiettivo, è sufficiente già cambiare i minuti e la seconda accordling

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

    echo $newdate; 

questo uscirà

2013-04-20 07:00:00 
1

Questo scrive la data in una stringa tramite emissione direttamente 00:00 come i minuti ei secondi invece di scrivere i:s:

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

Oppure avete bisogno come unix timestamp? Quindi tagliare i minuti ei secondi (sempre gli ultimi 5 byte) e sostituirli con 00:00.

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

In questo caso un semplice substr poteva fare:

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

strtotime() ti dà un timestamp Unix, che è il numero di secondi dal 1970-01-01 00:00:00.

E se solo diviso per 3600 secondi (secondi equivalenti a 1 ora) e ignorare i rimanenti (i minuti ei secondi desiderati)?

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

Dal momento che si dispone già di un timestamp Unix $d , il modo più efficiente è usare solo le funzioni aritmetiche invece delle date, specialmente se si passa al ciclo di un set di risultati.

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

operatore modulo ti dà il resto, che si sottrae dal timestamp per ottenere ora timestamp.

0

Per coloro che seguono (molto più tardi!): Carbon ha un modo semplice per fare questo

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