Fügen Sie die 'x'-Anzahl der Stunden hinzu

72

Ich habe derzeit PHP, das das aktuelle Datum / die aktuelle Uhrzeit wie folgt zurückgibt:

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

Was ich tun möchte, ist eine neue Variable $new_timegleich $now + $hours, wobei die $hoursAnzahl der Stunden zwischen 24 und 800 liegt.

Irgendwelche Vorschläge?

Jonah Katz
quelle
2
Ich bezweifle, ob es das ist, was du willst. Ich möchte, dass Sie bemerken, dass "m" in "H: m: s" den Monat auf der Ziffer darstellt. Ich glaube, Sie wollten "H: i: s" schreiben. Bitte Crosscheck
Paullo

Antworten:

119

Sie können so etwas wie die strtotime()Funktion 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 verwenden, wie auch immer strtotime("+{$hours} hours"), wie besser Sie es strtotime(sprintf("+%d hours", $hours))dann verwenden.

fdomig
quelle
Das funktioniert, aber wenn ich die '5' durch eine Variable ersetze, funktioniert es nicht richtig. strtotime('+$hours hours')
Jonah Katz
1
Meinst du nicht $ new_time = date ("Ymd H: i: s", strtotime ('+ 5 Stunden')? M ist Monat, ich
bin
42

Eine andere Lösung (objektorientiert) ist die Verwendung von 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 .

a11r
quelle
3
Kleiner Typ hier, $ date-> format sollte wahrscheinlich $ now-> format sein
Patrick
21

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
Zar
quelle
@RichardDesLonde Wahrscheinlich, weil jeder das Codebeispiel des OP kopiert hat. :-)
Zar
1
Das hat bei mir nicht funktioniert, antwortete Rodrigo Prazim.
Lucas
Ein nicht gut geformter numerischer Wert wurde gefunden - funktioniert nicht
10

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
Rodrigo Prazim
quelle
7

Sie können auch die Zeit im Unix-Stil verwenden, um Folgendes zu berechnen:

$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";
Ankit
quelle
schlechte Idee, Probleme mit Schaltjahren,
1
@ Dragon nein, es wird richtig berechnet.
Casraf
Schaltjahre werden mit dieser Methode erledigt, die Sommerzeit kann eingestellt werden, während das Datum wieder verwendet wird
Ankit
5

Ähm ... deine Minuten sollten korrigiert werden ... 'i' ist für Minuten. Keine 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
vr_driver
quelle
4

Ich benutze das, es funktioniert 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)));
Muhammad Wasim Akram
quelle
2

Sie können lib Ouzo Goodies probieren und dies auf fließende Weise tun:

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

APIs ermöglichen mehrere Operationen.

Piotr Olaszewski
quelle
0
$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 aus den Funktionen date () und strtotime () reicht aus .

user7282
quelle
0

Ich mag diese eingebauten PHP-Datumsausdrücke wie +1 hour, aber aus irgendeinem Grund fallen sie mir die ganze Zeit aus dem Kopf. Außerdem schlägt keine der mir bekannten IDEs eine automatische Vervollständigung für solche Dinge vor. Und schließlich, obwohl mit denen strtotimeund jonglierendate Funktionen keine Raketenwissenschaft ist, muss ich ihre Verwendung jedes Mal googeln, wenn ich sie brauche.

Deshalb mag ich die Lösung, die diese Probleme beseitigt (zumindest mildert). So kann das Hinzufügen von xStunden zu einem Datum aussehen:

(new Future(
    new DateTimeFromISO8601String('2014-11-21T06:04:31.321987+00:00'),
    new NHours($x)
))
    ->value();

Als netter Bonus müssen Sie sich keine Gedanken über die Formatierung des resultierenden Werts machen, er ist bereits im ISO8601-Format.

In diesem Beispiel wird die Baiser-Bibliothek verwendet. Weitere Beispiele finden Sie hier .

Vadim Samokhin
quelle
0

Für eine bestimmte DateTime können Sie Tage, Stunden, Minuten usw. hinzufügen. Hier einige Beispiele:

$now = new \DateTime();

$now->add(new DateInterval('PT24H')); // adds 24 hours

$now->add(new DateInterval('P2D')); // adds 2 days

PHP: DateTime :: add - Handbuch https://www.php.net/manual/fr/datetime.add.php

faye.babacar78
quelle
0

für 2 Stunden zu "jetzt" hinzufügen

$date = new DateTime('now +2 hours');

oder

$date = date("Y-m-d H:i:s", strtotime('+2 hours', $now)); // as above in example

oder

$now = new DateTime();

$now->add(new DateInterval('PT2H')); // as above in example
Toxab
quelle
-1

Ich verwende die folgende Funktion, um den normalen Datum-Uhrzeit-Wert in das MySQL-Datum / Uhrzeit-Format 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 Datum / Uhrzeit-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 wird jemandem helfen.

Vajira Lasantha
quelle
-2
   $now = date("Y-m-d H:i:s");
   date("Y-m-d H:i:s", strtotime("+1 hours $now"));
Basil BabyKurunnappillil
quelle