CascadiaPHP 2024

DateTime::modify

date_modify

(PHP 5 >= 5.2.0, PHP 7, PHP 8)

DateTime::modify -- date_modifyÄndert den Zeitstempel

Beschreibung

Objektorientierter Stil

public DateTime::modify(string $modifier): DateTime|false

Prozeduraler Stil

Ändert den Zeitstempel eines DateTime-Objektes durch Erhöhen oder Verringern in einem von DateTimeImmutable::__construct() aktzeptierten Format.

Parameter-Liste

object

Nur bei prozeduralem Aufruf: Ein von date_create() zurückgegebenes DateTime-Objekt. Diese Funktion verändert dieses Objekt.

modifier

Ein Datums/Zeit Zeichenkette. Gültige Formate werden unter Datums- und Zeitformate erläutert.

Rückgabewerte

Gibt das geänderte DateTime-Objekt für die Methodenverkettung zurück. Bei einem Fehler wird false zurückgegeben.

Fehler/Exceptions

Nur bei objektorientierter API: Wenn eine ungültige Datum/Uhrzeit-Zeichenkette übergeben wird, wird eine DateMalformedStringException geworfen.

Changelog

Version Beschreibung
8.3.0 Wirft nun eine DateMalformedStringException, statt eine Warnung auszugeben, wenn eine ungültige Zeichenkette an DateTime::modify() übergeben wird. Die Funktion date_modify() wurde nicht geändert.

Beispiele

Beispiel #1 DateTime::modify()-Beispiel

Objektorientierter Stil

<?php
$date
= new DateTime('2006-12-12');
$date->modify('+1 day');
echo
$date->format('Y-m-d');
?>

Prozeduraler Stil

<?php
$date
= date_create('2006-12-12');
date_modify($date, '+1 day');
echo
date_format($date, 'Y-m-d');
?>

Die obigen Bespiele erzeugen folgende Ausgabe:

2006-12-13

Beispiel #2 Vorsicht beim Addieren oder Subtrahieren von Monaten

<?php
$date
= new DateTime('2000-12-31');

$date->modify('+1 month');
echo
$date->format('Y-m-d') . "\n";

$date->modify('+1 month');
echo
$date->format('Y-m-d') . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2001-01-31
2001-03-03

Beispiel #3 Alle Formate von Datum und Zeit werden unterstützt

<?php
$date
= new DateTime('2020-12-31');

$date->modify('July 1st, 2023');
echo
$date->format('Y-m-d H:i') . "\n";

$date->modify('Monday next week');
echo
$date->format('Y-m-d H:i') . "\n";

$date->modify('17:30');
echo
$date->format('Y-m-d H:i') . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

2023-07-01 00:00
2023-07-03 00:00
2023-07-03 17:30

Siehe auch

add a note

User Contributed Notes 1 note

up
4
php_net at striderweb dot com
3 months ago
You have to be a bit careful with variables here. If for example you want to add a variable amount of minutes you might use `->modify("+$min"). This will not work out if `$min` is a negative number, because modify will see the "+" and ignore the "-". If `$min` equals -10, modify in this example will add ten minutes, not subtract!

What is happening is if the modify string has two operations, the first will be obeyed and later ones will be ignored.

So "+-10 minutes" will add ten minutes, even though you might expect it to add the negative number. Similarly "--10 minutes" will subtract ten minutes, despite the apparent logic of subtracting a negative number.
To Top