DateInterval Классы

DateInterval класы PHPде убакыт аралыктары менен иштөөгө мүмкүндүк берет. Ал эки датанын ортосундагы айырмачылыкты сактоо же даталар менен иштөө ыкмаларында аралыкты белгилөө үчүн колдонулат. Аралык атайын форматта түзүлөт.

Синтаксис

phpDateInterval::__construct(string $duration)

Аралыктын форматы

Формат P (period) тамгасынан жана элементтерден турат:

phpP{y}Y{m}M{d}DT{h}H{m}M{s}S{w}W

Бул форматында: Y - жылдар, M - айлар, D - күндөр, T - убакытты бөлүүчү, H - сааттар, M - мүнөттөр, S - секундтар, W - апталар.

Бул тамгалардын алдында тиешелүү маани жазылышы керек. Мисалы, 3Y деген үч жылды билдирет, ал эми 5Y2M деген 5 жыл жана 2 айды билдирет.

Түзүлгөндөн кийин DateInterval объектиси төмөнкү касиеттерди камтыйт:

php<?php
  $interval->y  // жылдар
  $interval->m  // айлар
  $interval->d  // күндөр
  $interval->h  // сааттар
  $interval->i  // мүнөттөр
  $interval->s  // секундтар
  $interval->f  // микросекундтар
  $interval->invert // 1 эгерде аралык терс болсо
  $interval->days // күндөрдүн саны (эгер diff() аркылуу түзүлсө)
?>

Келгиле, аралыктын иштешин мисалдарда көрөлү:

Мисал

1 саат, 45 мүнөт жана 30 секунд аралыгын түзөлү:

php<?php
  $interval = new DateInterval('PT1H45M30S');
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 1
  'i' => 45
  's' => 30
)

Мисал

3 апта жана 2 күн аралыгын түзөлү:

php<?php
  $interval = new DateInterval('P3W2D');
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 23
  'h' => 0
  'i' => 0
  's' => 0
)

Мисал

5 ай, 10 күн жана 6 саат аралыгын түзөлү:

php<?php
  $interval = new DateInterval('P5M10DT6H');
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 0
  'm' => 5
  'd' => 10
  'h' => 6
  'i' => 0
  's' => 0
)

Мисал

2 жыл жана 15 мүнөт аралыгын түзөлү:

php<?php
  $interval = new DateInterval('P2YT15M');
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 2
  'm' => 0
  'd' => 0
  'h' => 0
  'i' => 15
  's' => 0
)

Мисал

1 күн, 12 саат жана 30 секунд аралыгын түзөлү:

php<?php
  $interval = new DateInterval('P1DT12H30S');
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 1
  'h' => 12
  'i' => 0
  's' => 30
)

Мисал

1 жыл жана 3 ай терс аралыгын түзөлү (артка аралык):

php<?php
  $interval = new DateInterval('P1Y3M');
  $interval->invert = 1;
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 1
  'm' => 3
  'd' => 0
  'h' => 0
  'i' => 0
  's' => 0
  'invert' => 1
)

Мисал

2 саат, 30 мүнөт терс аралыгын түзөлү (артка аралык):

php<?php
  $interval = new DateInterval('PT2H30M');
  $interval->invert = 1;
  var_dump($interval);
?>

Кодду иштетүүнүн натыйжасы:

phpDateInterval Object
(
  'y' => 0
  'm' => 0
  'd' => 0
  'h' => 2
  'i' => 30
  's' => 0
  'invert' => 1
)

Мисал

Аралыкты учурдагы датага кошолу:

php<?php
  $date = new DateTime('2023-01-01');
  $interval = new DateInterval('P10D');
  $date->add($interval);
  echo $date->format('Y-m-d');
?>

Кодду иштетүүнүн натыйжасы:

php'2023-01-11'

Мисал

Эки датанын ортосундагы айырмачылыкты эсептейли:

php<?php
  $date1 = new DateTime('2023-01-01');
  $date2 = new DateTime('2023-02-15');
  $interval = $date1->diff($date2);
  echo $interval->format('%m ай %d күн');
?>

Кодду иштетүүнүн натыйжасы:

php'1 ай 14 күн'

Дагы караңыз

  • DateTime класы,
    датаны жана убакытты түшүндүрөт
  • DateTimeZone класы,
    убакыт зонасын түшүндүрөт