DateTimeInterface::diff

DateTimeImmutable::diff

DateTime::diff

date_diff

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

DateTimeInterface::diff -- DateTimeImmutable::diff -- DateTime::diff -- date_diff β€” Returns the difference between two DateTime objects

Опис

Об'Ρ”ΠΊΡ‚Π½ΠΎ-ΠΎΡ€Ρ–Ρ”Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ

public DateTimeInterface::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
public DateTimeImmutable::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval
public DateTime::diff(DateTimeInterface $targetObject, bool $absolute = false): DateInterval

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ

date_diff(DateTimeInterface $baseObject, DateTimeInterface $targetObject, bool $absolute = false): DateInterval

Returns the difference between two DateTimeInterface objects.

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

datetime

The date to compare to.

absolute

Should the interval be forced to be positive?

ЗначСння, Ρ‰ΠΎ ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°ΡŽΡ‚ΡŒΡΡ

The DateInterval object represents the difference between the two dates.

The absolute parameter only affects the invert property of a DateInterval object.

The return value more specifically represents the clock-time interval to apply to the original object ($this or $originObject) to arrive at the $targetObject. This process is not always reversible.

The method is aware of DST changeovers, and hence can return an interval of 24 hours and 30 minutes, as per one of the examples. If you want to calculate with absolute time, you need to convert both the $this/$baseObject, and $targetObject to UTC first.

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ #1 DateTimeImmutable::diff() example

Об'Ρ”ΠΊΡ‚Π½ΠΎ-ΠΎΡ€Ρ–Ρ”Π½Ρ‚ΠΎΠ²Π°Π½ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ

<?php
$origin
= new DateTimeImmutable('2009-10-11');
$target = new DateTimeImmutable('2009-10-13');
$interval = $origin->diff($target);
echo
$interval->format('%R%a days');

Поданий Π²ΠΈΡ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π²ΠΈΠ²Π΅Π΄Π΅:

+2 days

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½ΠΈΠΉ ΡΡ‚ΠΈΠ»ΡŒ

<?php
$origin
= date_create('2009-10-11');
$target = date_create('2009-10-13');
$interval = date_diff($origin, $target);
echo
$interval->format('%R%a days');

Поданий Π²ΠΈΡ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π²ΠΈΠ²Π΅Π΄Π΅:

+2 days

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ #2 DateTimeInterface::diff() during DST changeover

<?php
$originalTime
= new DateTimeImmutable("2021-10-30 09:00:00 Europe/London");
$targetTime = new DateTimeImmutable("2021-10-31 08:30:00 Europe/London");
$interval = $originalTime->diff($targetTime);
echo
$interval->format("%H:%I:%S (Full days: %a)"), "\n";

Поданий Π²ΠΈΡ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π²ΠΈΠ²Π΅Π΄Π΅:

24:30:00 (Full days: 0)

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ #3 DateTimeInterface::diff() range

The value that the method returns is the exact amount of time to get from $this to $targetObject. Comparing January 1st to December 31st returns therefore 364, and not 365, days (for non-leap years).

<?php
$originalTime
= new DateTimeImmutable("2023-01-01 UTC");
$targetTime = new DateTimeImmutable("2023-12-31 UTC");
$interval = $originalTime->diff($targetTime);
echo
"Full days: ", $interval->format("%a"), "\n";

Поданий Π²ΠΈΡ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π²ΠΈΠ²Π΅Π΄Π΅:

Full days: 364

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ #4 DateTime object comparison

ЗауваТСння:

DateTimeImmutable and DateTime objects can be compared using comparison operators.

<?php
$date1
= new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2);
var_dump($date1 < $date2);
var_dump($date1 > $date2);

Поданий Π²ΠΈΡ‰Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π²ΠΈΠ²Π΅Π΄Π΅:

bool(false)
bool(true)
bool(false)

ΠŸΡ€ΠΎΠ³Π»ΡΠ½ΡŒΡ‚Π΅ Ρ‚Π°ΠΊΠΎΠΆ

  • DateInterval::format() - Formats the interval
  • DateTime::add() - Modifies a DateTime object, with added amount of days, months, years, hours, minutes and seconds
  • DateTime::sub() - Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object
οΌ‹add a note

User Contributed Notes

There are no user contributed notes for this page.