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?



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.


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 .


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

@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

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

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

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

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.



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 .


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


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

-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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.