PHP 8.5.0 Beta 3 available for testing

DatePeriod::__construct

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

DatePeriod::__construct โ€” ๆ–ฐใ—ใ„ DatePeriod ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ™ใ‚‹

่ชฌๆ˜Ž

public DatePeriod::__construct(
    DateTimeInterface $start,
    DateInterval $interval,
    int $recurrences,
    int $options = 0
)
public DatePeriod::__construct(
    DateTimeInterface $start,
    DateInterval $interval,
    DateTimeInterface $end,
    int $options = 0
)
่ญฆๅ‘Š
public DatePeriod::__construct(string $isostr, int $options = 0)

ใ“ใฎใ‚ณใƒณใ‚นใƒˆใƒฉใ‚ฏใ‚ฟใฎใƒใƒชใ‚จใƒผใ‚ทใƒงใƒณใฏใ€ๆŽจๅฅจใ•ใ‚Œใชใใชใ‚Šใพใ—ใŸใ€‚ ไปฃใ‚ใ‚Šใซใ€DatePeriod::createFromISO8601String() ใ‚’ไฝฟใ„ใพใ—ใ‚‡ใ†ใ€‚

ๆ–ฐใ—ใ„ DatePeriod ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใ‚’ไฝœๆˆใ—ใพใ™ใ€‚

DatePeriod ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฏใ€ ใŸใใ•ใ‚“ใฎ DateTimeImmutable ใ‚„ DateTime ใ‚’็”Ÿๆˆใ™ใ‚‹ใ‚คใƒ†ใƒฌใƒผใ‚ฟใจใ—ใฆไฝฟใˆใพใ™ใ€‚ ใƒ‘ใƒฉใƒกใƒผใ‚ฟ start, interval, end, ใŠใ‚ˆใณ recurrences ใฎๆ•ฐใ‚’ๆŒ‡ๅฎšใงใใพใ™ใ€‚

่ฟ”ใ•ใ‚Œใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใฎใ‚ฏใƒฉใ‚นใฏใ€ start ใฎ็ฅ–ๅ…ˆใซใชใ‚‹ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใ€ DateTimeImmutable ใ‚„ DateTime ใซ็ญ‰ใ—ใใชใ‚Šใพใ™ใ€‚

ใƒ‘ใƒฉใƒกใƒผใ‚ฟ

start

ๆœŸ้–“ใฎ้–‹ๅง‹ๆ—ฅใ€‚ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€ ็ตๆžœใ‚ปใƒƒใƒˆใซๅซใพใ‚Œใฆใ„ใพใ™ใ€‚

interval

ๆœŸ้–“ๅ†…ใงใฎ็™บ็”Ÿ้–“้š”ใ€‚

recurrences

ๅๅพฉๅ›žๆ•ฐใ€‚ ่ฟ”ใ•ใ‚Œใ‚‹็ตๆžœใฎๆ•ฐใฏใ€ใ“ใฎๅ€คใ‚ˆใ‚Šใฒใจใคๅคงใใใชใ‚Šใพใ™ใ€‚ ใชใœใชใ‚‰ใ€ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏ็ตๆžœใ‚ปใƒƒใƒˆใซ้–‹ๅง‹ๆ—ฅใŒๅซใพใ‚Œใฆใ„ใ‚‹ใ‹ใ‚‰ใงใ™ใ€‚ 0 ใ‚ˆใ‚Šๅคงใใชๅ€คใงใชใ‘ใ‚Œใฐใ„ใ‘ใพใ›ใ‚“ใ€‚

end

ๆœŸ้–“ใฎ็ต‚ไบ†ๆ—ฅใ€‚ ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€็ตๆžœใ‚ปใƒƒใƒˆใ‹ใ‚‰้™คๅค–ใ•ใ‚Œใฆใ„ใพใ™ใ€‚

isostr

ยป ISO 8601 repeating interval specification ใฎใ‚ตใƒ–ใ‚ปใƒƒใƒˆใ‚’ๆŒ‡ๅฎšใ—ใพใ™ใ€‚

PHP ใŒใ‚ตใƒใƒผใƒˆใ—ใฆใ„ใชใ„ใ€ใ‚ตใƒ–ใ‚ปใƒƒใƒˆใฎๆฉŸ่ƒฝใฎไพ‹ใ‚’ไปฅไธ‹ใซ็คบใ—ใพใ™:

  1. 0ๅ›žใฎ็นฐใ‚Š่ฟ”ใ— (R0/)
  2. UTC ไปฅๅค–ใฎๆ™‚้–“ใฎใ‚ชใƒ•ใ‚ปใƒƒใƒˆ(Z)ใ€‚ ใŸใจใˆใฐ +02:00 ใฎใ‚ˆใ†ใชใ‚‚ใฎใงใ™ใ€‚
options

้–‹ๅง‹ๆ—ฅใจ็ต‚ไบ†ๆ—ฅใซ้–ขใ™ใ‚‹ๆŒฏใ‚‹่ˆžใ„ใ‚’ๅˆถๅพกใ™ใ‚‹ใƒ“ใƒƒใƒˆใƒ•ใ‚ฃใƒผใƒซใƒ‰

DatePeriod::EXCLUDE_START_DATE ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ€้–‹ๅง‹ๆ—ฅใ‚’ๆœŸ้–“ใฎ็ตๆžœใ‚ปใƒƒใƒˆใ‹ใ‚‰้™คๅค–ใงใใพใ™ใ€‚

DatePeriod::INCLUDE_END_DATE ใ‚’ๆŒ‡ๅฎšใ™ใ‚‹ใจใ€็ต‚ไบ†ๆ—ฅใ‚’ๆœŸ้–“ใฎ็ตๆžœใ‚ปใƒƒใƒˆใซๅซใ‚ใ‚‹ใ“ใจใŒใงใใพใ™ใ€‚

ใ‚จใƒฉใƒผ / ไพ‹ๅค–

isostr ใŒๆœ‰ๅŠนใช ISO 8601 ใฎๆœŸ้–“ใจใ—ใฆใƒ‘ใƒผใ‚นใงใใชใ„ๅ ดๅˆใ€ DateMalformedPeriodStringException ใ‚’ใ‚นใƒญใƒผใ—ใพใ™ใ€‚ ใ“ใ‚Œใ‚ˆใ‚Šๅ‰ใฎใƒใƒผใ‚ธใƒงใƒณใงใฏใ€Exception ใŒใ‚นใƒญใƒผใ•ใ‚Œใฆใ„ใพใ—ใŸใ€‚

ๅค‰ๆ›ดๅฑฅๆญด

ใƒใƒผใ‚ธใƒงใƒณ ่ชฌๆ˜Ž
8.3.0 Exception ใงใฏใชใใ€ DateMalformedPeriodStringException ใŒใ‚นใƒญใƒผใ•ใ‚Œใ‚‹ใ‚ˆใ†ใซใชใ‚Šใพใ—ใŸใ€‚
8.2.0 ๅฎšๆ•ฐ DatePeriod::INCLUDE_END_DATE ใŒ่ฟฝๅŠ ใ•ใ‚Œใพใ—ใŸใ€‚
7.2.19, 7.3.6, 7.4.0 recurrences ใฏใ€0 ใ‚ˆใ‚Šๅคงใใชๅ€คใŒๅฟ…้ ˆใซใชใ‚Šใพใ—ใŸใ€‚

ไพ‹

ไพ‹1 DatePeriod ใฎไพ‹

<?php
$start
= new DateTime('2012-07-01');
$interval = new DateInterval('P7D');
$end = new DateTime('2012-07-31');
$recurrences = 4;
$iso = 'R4/2012-07-01T00:00:00Z/P7D';

// ใ“ใ‚Œใ‚‰ใฏใ™ในใฆๅŒใ˜ๆ„ๅ‘ณใงใ™
$period = new DatePeriod($start, $interval, $recurrences);
$period = new DatePeriod($start, $interval, $end);
$period = new DatePeriod($iso);

// DatePeriod ใฎๅๅพฉๅ‡ฆ็†ใ‚’ใ™ใ‚‹ใจใ€
// ๆœŸ้–“ๅ†…ใฎใ™ในใฆใฎ็™บ็”Ÿๆ—ฅใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚
foreach ($period as $date) {
echo
$date->format('Y-m-d')."\n";
}
?>

ไธŠใฎไพ‹ใฎๅ‡บๅŠ›ใฏไปฅไธ‹ใจใชใ‚Šใพใ™ใ€‚

2012-07-01
2012-07-08
2012-07-15
2012-07-22
2012-07-29

ไพ‹2 DatePeriod ใง DatePeriod::EXCLUDE_START_DATE ใ‚’ไฝฟใ†ไพ‹

<?php
$start
= new DateTime('2012-07-01');
$interval = new DateInterval('P7D');
$end = new DateTime('2012-07-31');

$period = new DatePeriod($start, $interval, $end,
DatePeriod::EXCLUDE_START_DATE);

// DatePeriod ใฎๅๅพฉๅ‡ฆ็†ใ‚’ใ™ใ‚‹ใจใ€
// ๆœŸ้–“ๅ†…ใฎใ™ในใฆใฎ็™บ็”Ÿๆ—ฅใŒ่กจ็คบใ•ใ‚Œใพใ™ใ€‚
// ใŸใ ใ—ใ€ไปŠๅ›žใฎๅ ดๅˆใฏ 2012-07-01 ใŒ่กจ็คบใ•ใ‚Œใพใ›ใ‚“ใ€‚
foreach ($period as $date) {
echo
$date->format('Y-m-d')."\n";
}
?>

ไธŠใฎไพ‹ใฎๅ‡บๅŠ›ใฏไปฅไธ‹ใจใชใ‚Šใพใ™ใ€‚

2012-07-08
2012-07-15
2012-07-22
2012-07-29

ไพ‹3 ไธ€ๅนด้–“ใซๅซใพใ‚Œใ‚‹ใ€ๆœˆใฎๆœ€ๅพŒใฎๆœจๆ›œๆ—ฅใ‚’ๅ…จใฆ่กจ็คบใ™ใ‚‹ใ€DatePeriod ใฎไพ‹

<?php
$begin
= new DateTime('2021-12-31');
$end = new DateTime('2022-12-31 23:59:59');

$interval = DateInterval::createFromDateString('last thursday of next month');
$period = new DatePeriod($begin, $interval, $end, DatePeriod::EXCLUDE_START_DATE);

foreach (
$period as $dt) {
echo
$dt->format('l Y-m-d'), "\n";
}
?>

ไธŠใฎไพ‹ใฎๅ‡บๅŠ›ใฏไปฅไธ‹ใจใชใ‚Šใพใ™ใ€‚

Thursday 2022-01-27
Thursday 2022-02-24
Thursday 2022-03-31
Thursday 2022-04-28
Thursday 2022-05-26
Thursday 2022-06-30
Thursday 2022-07-28
Thursday 2022-08-25
Thursday 2022-09-29
Thursday 2022-10-27
Thursday 2022-11-24
Thursday 2022-12-29

ๆณจๆ„

ISO 8601 ใฎใ‚ปใ‚ฏใ‚ทใƒงใƒณ 4.5 "Recurring time interval" ใซ่จ˜่ผ‰ใ•ใ‚Œใฆใ„ใ‚‹็„ก้™ๅ›žๆ•ฐใฎ็นฐใ‚Š่ฟ”ใ—ใซใฏๅฏพๅฟœใ—ใฆใ„ใพใ›ใ‚“ใ€‚ ใคใพใ‚Šใ€isostr ใซ "R/..." ใ‚’ๆธกใ—ใŸใ‚Š end ใซ null ใ‚’ๆธกใ—ใŸใ‚Šใ—ใฆใ‚‚ๅ‹•ไฝœใ—ใพใ›ใ‚“ใ€‚

๏ผ‹add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top