DateInterval クナ゚

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

はじめãĢ

æ—Ĩäģ˜ãŽé–“隔をあらわしぞす。

æ ŧį´æ–šåŧã¯ã€å›ē厚値 (嚴、月、æ—Ĩ、時ãĒお) ã‚ã‚‹ã„ã¯į›¸å¯žæ™‚åˆģ (DateTimeImmutable と DateTime ãŽã‚ŗãƒŗã‚šãƒˆãƒŠã‚¯ã‚ŋがã‚ĩポãƒŧトしãĻいる書åŧ) とãĒりぞす。

さらãĢåŽŗå¯†ãĢč¨€ã†ã¨ã€ DateInterval ã‚ĒブジェクトがäŋæŒã—ãĻã„ã‚‹æƒ…å ąã¯ã€ ある date/time ã‚ĒブジェクトからåˆĨぎ date/time ã‚ĒブジェクトãĢæƒ…å ąã‚’į§ģす手順です。 ã“ãŽéŽį¨‹ã¯åŋ…ずしも可逆ではありぞせん。

DateInterval ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’į”Ÿæˆã™ã‚‹ä¸€čˆŦįš„ãĒやり斚は、 2つぎ date/time ã‚Ēãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŽåˇŽåˆ†ã‚’ DateTimeInterface::diff() įĩŒį”ąã§č¨ˆįŽ—ã™ã‚‹ã“ã¨ã§ã™ã€‚

æ—Ĩäģ˜ãŽé–“隔を比čŧƒã™ã‚‹č‰¯ã„æ–šæŗ•ã¯åŽšįžŠã•ã‚ŒãĻいぞせん。 ã‚ˆãŖãĻ、DateInterval ãŽã‚¤ãƒŗã‚šã‚ŋãƒŗã‚šã¯ 比čŧƒã§ããžã›ã‚“。

クナ゚æĻ‚čρ

class DateInterval {
/* ãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗ */
public int $y;
public int $m;
public int $d;
public int $h;
public int $i;
public int $s;
public float $f;
public int $invert;
public mixed $days;
/* ãƒĄã‚Ŋッド */
public function __construct(string $duration)
public static function createFromDateString(string $datetime): DateInterval
public function format(string $format): string
}

ãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗ

č­Ļ告

äģĨ下ãĢį¤ēã™ãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŒäŊŋえるかおうかは、 PHP ぎバãƒŧã‚¸ãƒ§ãƒŗãĢ䞝存しぞす。 そしãĻ、readonly とčĻ‹ãĒすずきです。

y

嚴。

m

月。

d

æ—Ĩ。

h

時間。

i

分。

s

į§’ã€‚

f

ãƒžã‚¤ã‚¯ãƒ­į§’ã€‚1į§’ãŽ100万分ぎ1です。

invert

é–“éš”ãŒč˛ ãŽæ•°ãĢãĒãŖãĻいる場合は 1、そうでãĒい場合は 0。 DateInterval::format() ã‚’å‚į…§ãã ã•ã„ã€‚

days

DateTimeImmutable::diff() や DateTime::diff() でäŊœã‚‰ã‚ŒãŸ DateInterval ã‚Ēブジェクトぎ場合は、開始æ—Ĩとįĩ‚ä熿—Ĩぎ間ぎ(丸一æ—Ĩ、つぞり0時から24時ぞでぎ一æ—Ĩ全äŊ“ã¨ã„ã†æ„å‘ŗã§ãŽ)æ—Ĩぎ数。 それäģĨ外ぎ場合は days は false とãĒりぞす。

from_string

DateInterval::createFromDateString() でäŊœã‚‰ã‚ŒãŸ DateInterval ã‚Ēブジェクトぎ場合は、 ã“ãŽãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŽå€¤ã¯ true ãĢãĒり、 date_string ぎ値が収集されぞす。 そうでãĒい場合、こぎ値は false ãĢãĒり、 y, f, invert, days ぎ値が収集されぞす。

date_string

DateInterval::createFromDateString() ぎåŧ•数としãĻäŊŋわれる文字列。

変更åąĨæ­´

バãƒŧã‚¸ãƒ§ãƒŗ čĒŦ明
8.2.0 DateInterval::createFromDateString() でäŊœã‚‰ã‚ŒãŸ DateInterval ãŽã‚¤ãƒŗã‚šã‚ŋãƒŗã‚šãŽãŸã‚ãĢ、 ãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗ from_string と date_string がčŋŊ加されぞした。
8.2.0 ãƒ—ãƒ­ãƒ‘ãƒ†ã‚Ŗ y から f, invert, days ぎãŋがã‚ĸクã‚ģ゚可čƒŊãĢãĒりぞした。
7.4.0 DateInterval ã‚¤ãƒŗã‚šã‚ŋãƒŗã‚šã¯ã€ 比čŧƒã§ããĒくãĒりぞした。 これより前ぎバãƒŧã‚¸ãƒ§ãƒŗã§ã¯ã€ 全ãĻぎ DateInterval ãŽã‚¤ãƒŗã‚šã‚ŋãƒŗã‚šãŒį­‰ã—ã„ã¨ãŋãĒされãĻいぞした。
7.1.0 f ãƒ—ãƒ­ãƒ‘ãƒ†ã‚ŖãŒčŋŊ加されぞした

į›ŽæŦĄ

īŧ‹add a note

User Contributed Notes 2 notes

up
57
cb Âļ
3 years ago
If you want to reverse a date interval use array_reverse and iterator_to_array. I've found using invert to be unreliable.

<?php
$start_date = date_create("2021-01-01");
$end_date   = date_create("2021-01-05"); // If you want to include this date, add 1 day

$interval = DateInterval::createFromDateString('1 day');
$daterange = new DatePeriod($start_date, $interval ,$end_date);

function show_dates ($dr) {
    foreach($dr as $date1){
        echo $date1->format('Y-m-d').'<br>';
    }
}
 
show_dates ($daterange);
   
echo '<br>';

// reverse the array

$daterange = array_reverse(iterator_to_array($daterange));

show_dates ($daterange);
           
?>

Gives 
 2021-01-01
 2021-01-02
 2021-01-03
 2021-01-04

 2021-01-04
 2021-01-03
 2021-01-02
 2021-01-01
up
1
julio dot necronomicon at gmail dot com Âļ
2 years ago
More simple example i use to add or subtract.

<?php
$Datetime = new Datetime('NOW', new DateTimeZone('America/Bahia'));
$Datetime->add(DateInterval::createFromDateString('2 day'));

echo $Datetime->format("Y-m-d H:i:s");
?>