Ich versuche, ein Datumsobjekt zu nehmen, das aus meinem Drupal-CMS stammt, einen Tag zu subtrahieren und beide Daten auszudrucken. Hier ist was ich habe
$date_raw = $messagenode->field_message_date[0]['value'];
print($date_raw);
//this gives me the following string: 2011-04-24T00:00:00
$date_object = date_create($date_raw);
$next_date_object = date_modify($date_object,'-1 day');
print('First Date ' . date_format($date_object,'Y-m-d'));
//this gives me the correctly formatted string '2011-04-24'
print('Next Date ' . date_format($next_date_object,'Y-m-d'));
//this gives me nothing. The output here is always blank
Ich verstehe also nicht, warum das ursprüngliche Datumsobjekt gut herauskommt, aber dann versuche ich, ein zusätzliches Datumsobjekt zu erstellen und es durch Subtrahieren eines Tages zu ändern, und es scheint, dass ich das nicht tun kann. Die Ausgabe ist immer leer.
php
datetimeoffset
td-dev
quelle
quelle
$date_raw = date("r");
DateTime
( siehe hier ).date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) ));
quelle
$date = new DateTime("2017-05-18"); // For today/now, don't pass an arg. $date->modify("-1 day"); echo $date->format("Y-m-d H:i:s");
Durch die Verwendung von DateTime konnten die Kopfschmerzen beim Bearbeiten von Datumsangaben erheblich reduziert werden.
quelle
date_create
ist die prozedurale Methode zum Aufrufen desDateTime
Konstruktors , mit der Sie Ihre 3 Zeilen ohne Verwendung auf 1 reduzieren könnennew
. Ieecho date_create('2017-05-18')->modify('-1 day')->format('Y-m-d H:i:s');
Objektorientierte Version
$dateObject = new DateTime( $date_raw ); print('Next Date ' . $dateObject->sub( new DateInterval('P1D') )->format('Y-m-d');
quelle
Eine Einzeileroption ist:
echo date_create('2011-04-24')->modify('-1 days')->format('Y-m-d');
Ausführen im Online PHP Editor .
mktime Alternative
Wenn Sie es vorziehen, keine String-Methoden zu verwenden, Berechnungen durchzuführen oder sogar zusätzliche Variablen zu erstellen, unterstützt mktime die Subtraktion und negative Werte auf folgende Weise:
// Today's date echo date('Y-m-d'); // 2016-03-22 // Yesterday's date echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-1, date("Y"))); // 2016-03-21 // 42 days ago echo date('Y-m-d', mktime(0, 0, 0, date("m"), date("d")-42, date("Y"))); // 2016-02-09 //Using a previous date object $date_object = new DateTime('2011-04-24'); echo date('Y-m-d', mktime(0, 0, 0, $date_object->format("m"), $date_object->format("d")-1, $date_object->format("Y") ) ); // 2011-04-23
Online PHP Editor
quelle
Sie sind sich nicht sicher, warum Ihr aktueller Code nicht funktioniert, aber wenn Sie kein spezielles Datumsobjekt benötigen, funktioniert dies:
$first_date = strtotime($date_raw); $second_date = strtotime('-1 day', $first_date); print 'First Date ' . date('Y-m-d', $first_date); print 'Next Date ' . date('Y-m-d', $second_date);
quelle
Antworten aus PHP Handbuch strtotime Funktion Kommentare entnommen:
echo date( "Y-m-d", strtotime( "2009-01-31 -1 day"));
Oder
$date = "2009-01-31"; echo date( "Y-m-d", strtotime( $date . "-1 day"));
quelle
Wie wäre es damit: Konvertieren Sie es zuerst in einen Unix-Zeitstempel, subtrahieren Sie 60 * 60 * 24 (genau einen Tag in Sekunden) und ermitteln Sie dann das Datum daraus.
$newDate = strtotime($date_raw) - 60*60*24; echo date('Y-m-d',$newDate);
Hinweis: Wie Apokryfos hervorgehoben hat, würde dies technisch durch Änderungen der Sommerzeit beeinträchtigt, wenn es einen Tag mit 25 oder 23 Stunden geben würde
quelle
So einfach ist das:
date("Y-m-d", strtotime("-1 day"));
date("Y-m-d", strtotime("-1 months"))
quelle
So fügen Sie einem Datum 1 Jahr hinzu und subtrahieren dann 1 Tag davon in asp.net c #
Convert.ToDateTime(txtDate.Value.Trim()).AddYears(1).AddDays(-1);
quelle