web-dev-qa-db-de.com

Fügen Sie bis zu 'x' Stunden hinzu

Ich habe derzeit die aktuelle Uhrzeit/das aktuelle Datum von php: 

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

Die ID möchte eine neue Variable $new_time gleich $now + $hours. $hours ist eine Anzahl von Stunden im Bereich von 24-800. 

Irgendwelche Vorschläge? 

53
Jonah Katz

Sie können so etwas wie die Funktion strtotime() verwenden, um dem aktuellen Zeitstempel etwas hinzuzufügen. $new_time = date("Y-m-d H:i:s", strtotime('+5 hours')).

Wenn Sie Variablen in der Funktion benötigen, müssen Sie doppelte Anführungszeichen wie strtotime("+{$hours} hours") verwenden, besser jedoch strtotime(sprintf("+%d hours", $hours)).

96
fdomig

Eine andere Lösung (objektorientiert) ist DateTime :: add 

Beispiel:

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

PHP Dokumentation .

29
FAjir

Sie können strtotime () verwenden, um dies zu erreichen:

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

Richtig

Sie können strtotime () verwenden, um dies zu erreichen:

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

Ähm ... Ihre Minuten sollten korrigiert werden ... "Ich" ist für Minuten. Nicht Monate. :) (Ich hatte das gleiche Problem auch für etwas.

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

Sie können die Unix-Stilzeit auch zur Berechnung verwenden:

$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";
4
Ankit

Sie können lib Ouzo-Goodies ausprobieren und dies fließend tun:

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

APIs erlauben mehrere Operationen.

2
$date_to_be-added="2018-04-11 10:04:46";
$added_date=date("Y-m-d H:i:s",strtotime('+24 hours', strtotime($date_to_be)));

Eine Kombination von date () und strtotime () macht den Trick.

0
user7282

Ich benutze das, es arbeitet cool. 

//set timezone
date_default_timezone_set('GMT');

//set an date and time to work with
$start = '2014-06-01 14:00:00';

//display the converted time
echo date('Y-m-d H:i',strtotime('+1 hour +20 minutes',strtotime($start)));

Ich verwende folgende Funktion, um den normalen Datum-Uhrzeit-Wert in das Mysql-Datumsformat zu konvertieren.

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;
        }

Es konvertiert datetime-Werte wie

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

Hoffe das hilft jemandem.

0
Vajira Lasantha