2016-04-05 6 views
1

Ich versuche, Tag und Stunde von bestimmten Datum Zeit Beispiel subtrahieren:Wie 1 Tag bis subtrahieren 16 Stunden von Datetime in PHP

$schedule_date_time = '2016-02-29 08:30 PM'; 
echo date("Y-m-d h:i a", strtotime("-1 day 16 hours", strtotime($schedule_date_time))); 

Es gibt mir folgendes Ergebnis: 2016.02.29 00.30 pm

, die nicht korrekt ist ...

Aber wenn ich dies tun:

$schedule_date_time = '2016-02-29 08:30 PM'; 
    echo date("Y-m-d h:i a", strtotime("-1 day -16 hours", strtotime($schedule_date_time))); 

Es gibt mir folgendes Ergebnis: 2016.02.28 04.30

, die korrekt ist, aber ist mir nicht möglich, vor der ganzen Zahl zu identifizieren und nur in String Minuszeichen zu setzen.

+0

Konvertieren Sie die Tage in Stunden, so dass Sie 40 Stunden direkt subtrahieren. – slax0r

+3

@ slax0r nicht alle Tage sind 24 Stunden lang. – apokryfos

+0

Haben Sie versucht, 40 Stunden anstatt 1 Tag, 16 Stunden zu subtrahieren? Wenn Sie keine universelle Zeitzone verwenden (z. B. UTC/GMT/Zulu), wie schlagen Sie vor, die Sommerzeit zu berücksichtigen? – GordonM

Antwort

3

Verwenden Sie date_sub/DateTime::sub.

$date = date_create("2016-02-29 08:30 PM") ; 
date_sub($date, date_interval_create_from_date_string('1 day 16 hours')); 
echo date_format($date, 'Y-m-d h:i a'); // 2016-02-28 04:30 am 

Wenn Sie eine Menge Zeit hinzugefügt werden soll, anstatt sie zu subtrahieren, verwenden date_add statt.

+0

Sehr hilfreich und lernen Sie einen neuen Code .. – AngularLearner

0

Sie können wie zusammen mit DateInterval Klasse DateTime::sub Klassenmethode verwenden, wie

$date2 = new DateTime('2016-02-29 08:30 PM'); 
$date2->sub(new DateInterval('P1DT16H')); 
echo $date2->format("Y-m-d H:i:s"); 
+0

Downvoters atleast post den Grund für die Aufhebung –

2

Das DateTime Objekt ist so mächtig, in PHP:

$dateTimeObj = DateTime::createFromFormat('Y-m-d H:i:s', '2016-04-04 15:20:00'); 
$dateTimeObj->modify('-1 day'); 
$dateTimeObj->modify('-16 hours'); 
echo $dateTimeObj->format('Y-m-d H:i:s'); 

Es ist sehr einfach und sehr wartbar für zukünftigen Code zu verwenden, -Reviewer.

+0

Oder nur $ dateTimeObj-> ändern ("-40 Stunden"). Oder Sie könnten Intervalle verwenden. – GordonM

+0

@GordonM wegen [link] (https://en.wikipedia.org/wiki/Daylight_saving_time). 40 Stunden sind vielleicht nicht immer 1 Tag und 16 Stunden. – st2erw2od

Verwandte Themen