Класси 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 months %d days');
?>

Натиҷаи иҷрои код:

php'1 months 14 days'

Инчунин нигаред

  • класси DateTime,
    ки сана ва вақтро ифода мекунад
  • класси DateTimeZone,
    ки минтақаи вақтиро ифода мекунад