diff --git a/appendices/migration55.xml b/appendices/migration55.xml
index 09318a46f6..1b05cc281e 100644
--- a/appendices/migration55.xml
+++ b/appendices/migration55.xml
@@ -1234,6 +1234,11 @@ String dereferencing: P
DateTimeImmutable
+
+
+ DateTimeInterface
+
+
diff --git a/reference/datetime/book.xml b/reference/datetime/book.xml
index 8caed916bc..cde63002aa 100644
--- a/reference/datetime/book.xml
+++ b/reference/datetime/book.xml
@@ -44,6 +44,8 @@
&reference.datetime.constants;
&reference.datetime.datetime;
+ &reference.datetime.datetimeimmutable;
+ &reference.datetime.datetimeinterface;
&reference.datetime.datetimezone;
&reference.datetime.dateinterval;
&reference.datetime.dateperiod;
diff --git a/reference/datetime/datetime.xml b/reference/datetime/datetime.xml
index 5ca5df0a94..e64b1dd210 100644
--- a/reference/datetime/datetime.xml
+++ b/reference/datetime/datetime.xml
@@ -29,6 +29,9 @@
DateTime
+
+ DateTimeInterface
+
&Constants;
@@ -111,6 +114,9 @@
+
+ &InheritedMethods;
+
@@ -248,6 +254,12 @@
+
+ 5.5.0
+
+ The class now implements DateTimeInterface.
+
+
5.2.2
diff --git a/reference/datetime/datetimeimmutable.xml b/reference/datetime/datetimeimmutable.xml
new file mode 100644
index 0000000000..d774d9a7e6
--- /dev/null
+++ b/reference/datetime/datetimeimmutable.xml
@@ -0,0 +1,76 @@
+
+
+
+
+
+ The DateTimeImmutable class
+ DateTimeImmutable
+
+
+
+
+
+ &reftitle.intro;
+
+ This class behaves the same as DateTime except it
+ never modifies itself but returns a new object instead.
+
+
+
+
+
+ &reftitle.classsynopsis;
+
+
+
+ DateTimeImmutable
+
+
+
+
+ DateTimeImmutable
+
+
+
+ DateTimeInterface
+
+
+
+
+ &Methods;
+
+
+
+ &InheritedMethods;
+
+
+
+
+
+
+
+
+ &reference.datetime.entities.datetimeimmutable;
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/add.xml b/reference/datetime/datetimeimmutable/add.xml
new file mode 100644
index 0000000000..e4ee81c9c9
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/add.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ DateTimeImmutable::add
+
+ Adds an amount of days, months, years, hours, minutes and seconds
+
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::add
+ DateIntervalinterval
+
+
+ Like DateTime::add but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/construct.xml b/reference/datetime/datetimeimmutable/construct.xml
new file mode 100644
index 0000000000..88ef97ea44
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/construct.xml
@@ -0,0 +1,52 @@
+
+
+
+
+
+ DateTimeImmutable::__construct
+ date_create_immutable
+ Returns new DateTimeImmutable object
+
+
+
+ &reftitle.description;
+ &style.oop;
+
+ public DateTimeImmutable::__construct
+ stringtime"now"
+ DateTimeZonetimezone&null;
+
+ &style.procedural;
+
+ DateTimeImmutabledate_create_immutable
+ stringtime"now"
+ DateTimeZonetimezone&null;
+
+
+ Like DateTime::__construct but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/createfromformat.xml b/reference/datetime/datetimeimmutable/createfromformat.xml
new file mode 100644
index 0000000000..c412c8031e
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/createfromformat.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+ DateTimeImmutable::createFromFormat
+ date_create_immutable_from_format
+ Returns new DateTimeImmutable object formatted according to the specified format
+
+
+
+ &reftitle.description;
+ &style.oop;
+
+ public static DateTimeImmutableDateTimeImmutable::createFromFormat
+ stringformat
+ stringtime
+ DateTimeZonetimezone
+
+ &style.procedural;
+
+ DateTimeImmutabledate_create_immutable_from_format
+ stringformat
+ stringtime
+ DateTimeZonetimezone
+
+
+ Like DateTime::createFromFormat but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/getlasterrors.xml b/reference/datetime/datetimeimmutable/getlasterrors.xml
new file mode 100644
index 0000000000..74f5041c4c
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/getlasterrors.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ DateTimeImmutable::getLastErrors
+ Returns the warnings and errors
+
+
+
+ &reftitle.description;
+
+ public static arrayDateTimeImmutable::getLastErrors
+
+
+
+ Like DateTime::getLastErrors but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/modify.xml b/reference/datetime/datetimeimmutable/modify.xml
new file mode 100644
index 0000000000..f33df38532
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/modify.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ DateTimeImmutable::modify
+ Alters the timestamp
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::modify
+ stringmodify
+
+
+ Like DateTime::modify but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/set-state.xml b/reference/datetime/datetimeimmutable/set-state.xml
new file mode 100644
index 0000000000..7e356071f7
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/set-state.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ DateTimeImmutable::__set_state
+ The __set_state handler
+
+
+
+ &reftitle.description;
+
+ public static DateTimeImmutableDateTimeImmutable::__set_state
+ arrayarray
+
+
+ Like DateTime::__set_state but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/setdate.xml b/reference/datetime/datetimeimmutable/setdate.xml
new file mode 100644
index 0000000000..c6ec1897be
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/setdate.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ DateTimeImmutable::setDate
+ Sets the date
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::setDate
+ intyear
+ intmonth
+ intday
+
+
+ Like DateTime::setDate but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/setisodate.xml b/reference/datetime/datetimeimmutable/setisodate.xml
new file mode 100644
index 0000000000..be9f014107
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/setisodate.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ DateTimeImmutable::setISODate
+ Sets the ISO date
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::setISODate
+ intyear
+ intweek
+ intday1
+
+
+ Like DateTime::setISODate but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/settime.xml b/reference/datetime/datetimeimmutable/settime.xml
new file mode 100644
index 0000000000..278a57c597
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/settime.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ DateTimeImmutable::setTime
+ Sets the time
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::setTime
+ inthour
+ intminute
+ intsecond0
+
+
+ Like DateTime::setTime but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/settimestamp.xml b/reference/datetime/datetimeimmutable/settimestamp.xml
new file mode 100644
index 0000000000..878987a811
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/settimestamp.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ DateTimeImmutable::setTimestamp
+ Sets the date and time based on an Unix timestamp
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::setTimestamp
+ intunixtimestamp
+
+
+ Like DateTime::setTimestamp but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/settimezone.xml b/reference/datetime/datetimeimmutable/settimezone.xml
new file mode 100644
index 0000000000..6e1fb81f67
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/settimezone.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+ DateTimeImmutable::setTimezone
+ Sets the time zone
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::setTimezone
+ DateTimeZonetimezone
+
+
+ Like DateTime::setTimezone but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeimmutable/sub.xml b/reference/datetime/datetimeimmutable/sub.xml
new file mode 100644
index 0000000000..8b4c09aff2
--- /dev/null
+++ b/reference/datetime/datetimeimmutable/sub.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ DateTimeImmutable::sub
+
+ Subtracts an amount of days, months, years, hours, minutes and seconds
+
+
+
+
+ &reftitle.description;
+
+ public DateTimeImmutableDateTimeImmutable::sub
+ DateIntervalinterval
+
+
+ Like DateTime::sub but works with
+ DateTimeImmutable.
+
+
+
+
+
+
diff --git a/reference/datetime/datetimeinterface.xml b/reference/datetime/datetimeinterface.xml
new file mode 100644
index 0000000000..bffd1ea8ff
--- /dev/null
+++ b/reference/datetime/datetimeinterface.xml
@@ -0,0 +1,67 @@
+
+
+
+
+
+ The DateTimeInterface interface
+ DateTimeInterface
+
+
+
+
+
+ &reftitle.intro;
+
+
+
+
+
+
+
+ &reftitle.classsynopsis;
+
+
+
+ DateTimeInterface
+
+
+
+
+ DateTimeInterface
+
+
+
+
+ &Methods;
+
+
+
+
+
+
+
+
+ &reference.datetime.entities.datetimeinterface;
+
+
+
+
diff --git a/reference/datetime/datetime/diff.xml b/reference/datetime/datetimeinterface/diff.xml
similarity index 89%
rename from reference/datetime/datetime/diff.xml
rename to reference/datetime/datetimeinterface/diff.xml
index 41cab2f543..6d9dc9475c 100644
--- a/reference/datetime/datetime/diff.xml
+++ b/reference/datetime/datetimeinterface/diff.xml
@@ -3,7 +3,7 @@
- DateTime::diff
+ DateTimeInterface::diff
date_diff
Returns the difference between two DateTime objects
@@ -12,19 +12,20 @@
&reftitle.description;
&style.oop;
- public DateIntervalDateTime::diff
- DateTimedatetime2
+ public DateIntervalDateTimeInterface::diff
+ DateTimeInterfacedatetime2
boolabsolutefalse
&style.procedural;
DateIntervaldate_diff
- DateTimedatetime1
- DateTimedatetime2
+ DateTimeInterfacedatetime1
+ DateTimeInterfacedatetime2
boolabsolutefalse
- Returns the difference between two DateTime objects.
+ Returns the difference between two DateTimeInterface
+ objects.
diff --git a/reference/datetime/datetime/format.xml b/reference/datetime/datetimeinterface/format.xml
similarity index 94%
rename from reference/datetime/datetime/format.xml
rename to reference/datetime/datetimeinterface/format.xml
index bb65f81f24..d14210b3c5 100644
--- a/reference/datetime/datetime/format.xml
+++ b/reference/datetime/datetimeinterface/format.xml
@@ -3,7 +3,7 @@
- DateTime::format
+ DateTimeInterface::format
date_format
Returns date formatted according to given format
@@ -12,13 +12,13 @@
&reftitle.description;
&style.oop;
- public stringDateTime::format
+ public stringDateTimeInterface::format
stringformat
&style.procedural;
stringdate_format
- DateTimeobject
+ DateTimeInterfaceobject
stringformat
diff --git a/reference/datetime/datetime/getoffset.xml b/reference/datetime/datetimeinterface/getoffset.xml
similarity index 93%
rename from reference/datetime/datetime/getoffset.xml
rename to reference/datetime/datetimeinterface/getoffset.xml
index 2c19107808..a3457d45f3 100644
--- a/reference/datetime/datetime/getoffset.xml
+++ b/reference/datetime/datetimeinterface/getoffset.xml
@@ -3,7 +3,7 @@
- DateTime::getOffset
+ DateTimeInterface::getOffset
date_offset_get
Returns the timezone offset
@@ -12,13 +12,13 @@
&reftitle.description;
&style.oop;
- public intDateTime::getOffset
+ public intDateTimeInterface::getOffset
&style.procedural;
intdate_offset_get
- DateTimeobject
+ DateTimeInterfaceobject
Returns the timezone offset.
diff --git a/reference/datetime/datetime/gettimestamp.xml b/reference/datetime/datetimeinterface/gettimestamp.xml
similarity index 92%
rename from reference/datetime/datetime/gettimestamp.xml
rename to reference/datetime/datetimeinterface/gettimestamp.xml
index eb283ceb75..3eed13d69d 100644
--- a/reference/datetime/datetime/gettimestamp.xml
+++ b/reference/datetime/datetimeinterface/gettimestamp.xml
@@ -3,7 +3,7 @@
- DateTime::getTimestamp
+ DateTimeInterface::getTimestamp
date_timestamp_get
Gets the Unix timestamp
@@ -12,13 +12,13 @@
&reftitle.description;
&style.oop;
- public intDateTime::getTimestamp
+ public intDateTimeInterface::getTimestamp
&style.procedural;
intdate_timestamp_get
- DateTimeobject
+ DateTimeInterfaceobject
Gets the Unix timestamp.
diff --git a/reference/datetime/datetime/gettimezone.xml b/reference/datetime/datetimeinterface/gettimezone.xml
similarity index 92%
rename from reference/datetime/datetime/gettimezone.xml
rename to reference/datetime/datetimeinterface/gettimezone.xml
index 45653d83f6..ca423b2342 100644
--- a/reference/datetime/datetime/gettimezone.xml
+++ b/reference/datetime/datetimeinterface/gettimezone.xml
@@ -3,7 +3,7 @@
- DateTime::getTimezone
+ DateTimeInterface::getTimezone
date_timezone_get
Return time zone relative to given DateTime
@@ -12,13 +12,13 @@
&reftitle.description;
&style.oop;
- public DateTimeZoneDateTime::getTimezone
+ public DateTimeZoneDateTimeInterface::getTimezone
&style.procedural;
DateTimeZonedate_timezone_get
- DateTimeobject
+ DateTimeInterfaceobject
Return time zone relative to given DateTime.
diff --git a/reference/datetime/datetime/wakeup.xml b/reference/datetime/datetimeinterface/wakeup.xml
similarity index 89%
rename from reference/datetime/datetime/wakeup.xml
rename to reference/datetime/datetimeinterface/wakeup.xml
index 8710f61070..7c1bf4b5c1 100644
--- a/reference/datetime/datetime/wakeup.xml
+++ b/reference/datetime/datetimeinterface/wakeup.xml
@@ -3,14 +3,14 @@
- DateTime::__wakeup
+ DateTimeInterface::__wakeup
The __wakeup handler
&reftitle.description;
- public DateTimeDateTime::__wakeup
+ public DateTimeInterface::__wakeup
diff --git a/reference/datetime/functions/date-create-immutable-from-format.xml b/reference/datetime/functions/date-create-immutable-from-format.xml
new file mode 100644
index 0000000000..b5c9e739d2
--- /dev/null
+++ b/reference/datetime/functions/date-create-immutable-from-format.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+ date_create_immutable_from_format
+ &Alias; DateTimeImmutable::createFromFormat
+
+
+
+ &reftitle.description;
+
+ &info.function.alias; DateTimeImmutable::createFromFormat
+
+
+
+
+
+
diff --git a/reference/datetime/functions/date-create-immutable.xml b/reference/datetime/functions/date-create-immutable.xml
new file mode 100644
index 0000000000..06943fc405
--- /dev/null
+++ b/reference/datetime/functions/date-create-immutable.xml
@@ -0,0 +1,37 @@
+
+
+
+
+ date_create_immutable
+ &Alias; DateTimeImmutable::__construct
+
+
+
+ &reftitle.description;
+
+ &info.function.alias; DateTimeImmutable::__construct
+
+
+
+
+
+
diff --git a/reference/datetime/versions.xml b/reference/datetime/versions.xml
index 24c3c41730..6944a93fce 100644
--- a/reference/datetime/versions.xml
+++ b/reference/datetime/versions.xml
@@ -8,16 +8,10 @@
-
-
-
-
-
-
@@ -26,17 +20,19 @@
+
+
+
+
+
+
+
+
-
-
-
-
-
-