2012-07-08 13 views
42

Al momento ho php ottenere la corrente data/ora in questo modo:Aggiungi 'X' quantità di ore fino ad oggi

$now = date("Y-m-d H:m:s"); 

Cosa id piace fare è avere una nuova variabile $new_time pari $now + $hours. $hours è una quantità di ore che vanno ovunque 24-800.

Qualche suggerimento?

+0

strtotime() http://php.net/manual/en/function.strtotime.php –

+2

Dubito se è ciò che vuoi Voglio che tu noti che "m" in "H: m: s" rappresenta il mese in cifre. Credo che tu volessi scrivere "H: i: s". Si prega di crosscontrare – Paullo

risposta

75

È possibile utilizzare qualcosa come la funzione strtotime() per aggiungere qualcosa al timestamp corrente. $new_time = date("Y-m-d H:i:s", strtotime('+5 hours')).

Se sono necessarie variabili nella funzione, è necessario utilizzare virgolette doppie, ad esempio strtotime("+{$hours} hours"), tuttavia è meglio utilizzare strtotime(sprintf("+%d hours", $hours)).

+0

Che funziona, ma se sostituisco il '5' con una variabile, non funziona correttamente. 'strtotime ('+ $ hours hours')' –

+0

Ho aggiornato la risposta che dovrebbe aiutarti. – fdomig

+0

Non intendi $ new_time = date ("Y-m-d H: i: s", strtotime ('+ 5 ore')? M è mese, i è minuti ... – richard

16

È possibile utilizzare strtotime() per raggiungere questo obiettivo:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours 
+1

Che cosa è con queste risposte usando m per minuti ??? – richard

+0

@RichardDesLonde Probabilmente perché tutti hanno copiato l'esempio di codice dell'OP. :-) – Zar

3

È inoltre possibile utilizzare il tempo in stile Unix per calcolare:

$newtime = time() + ($hours * 60 * 60); // hours; 60 mins; 60secs 
echo 'Now:  '. date('Y-m-d') ."\n"; 
echo 'Next Week: '. date('Y-m-d', $newtime) ."\n"; 
+0

cattiva idea, problemi con anni bisestili, secondi bisestili, ora legale ecc. –

+0

@Dagon no, calcolerà correttamente. – casraf

+0

Gli anni bisestili si prendono cura di usare questo metodo, l'ora legale può essere impostata mentre si usa nuovamente la data – Ankit

4

Um ... i minuti devono essere corretti ... ' sono per minuti. Non mesi :) (Ho avuto lo stesso problema per qualcosa di troppo

$now = date("Y-m-d H:i:s"); 
$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', $now)); // $now + 3 hours 
22

Un altra soluzione (object-oriented) è quello di utilizzare DateTime :: aggiungere

Esempio:..

$now = new DateTime(); //current date/time 
$now->add(new DateInterval("PT{$hours}H")); 
$new_time = $now->format('Y-m-d H:i:s'); 

PHP documentation

+3

Piccolo tyop qui, $ date-> il formato dovrebbe essere probabilmente $ ora-> formato – Patrick

0

Uso la seguente funzione per convertire il normale valore data-ora in formato datetime mysql

private function ampmtosql($ampmdate) { 
      if($ampmdate == '') 
       return ''; 
      $ampm = substr(trim(($ampmdate)), -2); 
      $datetimesql = substr(trim(($ampmdate)), 0, -3); 
      if ($ampm == 'pm') { 
       $hours = substr(trim($datetimesql), -5, 2); 
       if($hours != '12') 
        $datetimesql = date('Y-m-d H:i',strtotime('+12 hour',strtotime($datetimesql))); 
      } 
      elseif ($ampm == 'am') { 
       $hours = substr(trim($datetimesql), -5, 2); 
       if($hours == '12') 
        $datetimesql = date('Y-m-d H:i',strtotime('-12 hour',strtotime($datetimesql))); 
      } 
      return $datetimesql; 
     } 

Converte valori datetime come,

2015-06-04 09:55 AM -> 2015-06-04 09:55 
2015-06-04 03:55 PM -> 2015-06-04 15:55 
2015-06-04 12:30 AM -> 2015-06-04 00:55 

Spero che questo vi aiuterà qualcuno.

2

si può provare lib Ouzo goodies, e farlo in modo fluido:

echo Clock::now()->plusHours($hours)->format("Y-m-d H:m:s"); 

API consentono più operazioni.

6

corretta

È possibile utilizzare strtotime() per raggiungere questo obiettivo:

$new_time = date("Y-m-d H:i:s", strtotime('+3 hours', strtotime($now))); // $now + 3 hours 
Problemi correlati