Skip to content

Commit 8fba0d3

Browse files
committed
一旦コミット
1 parent 6fa904d commit 8fba0d3

File tree

5 files changed

+187
-226
lines changed

5 files changed

+187
-226
lines changed

.vscode/settings.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,8 @@
88
// php-cs-fixer settings
99
"php-cs-fixer.config": ".php-cs-fixer.dist.php",
1010
"php-cs-fixer.executablePath": "${workspaceFolder}/vendor/friendsofphp/php-cs-fixer/php-cs-fixer",
11-
// HACK: PHP8.4 に PHP-CS-Fixer が対応していないが強制的に実行するための設定
12-
// TODO: PHP-CS-Fixer が PHP8.4 に対応したら削除すること!!!!
13-
"php-cs-fixer.ignorePHPVersion": true,
1411
// PHPStan settings
12+
"phpstan.enabled": true,
1513
"phpstan.binPath": "vendor/bin/phpstan",
1614
"phpstan.configFile": "phpstan.neon.dist",
1715
"phpstan.singleFileMode": true,

examples/DateTime/TestLocalDateRange.php

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,30 @@
66

77
use WizDevelop\PhpValueObject\DateTime\LocalDate;
88
use WizDevelop\PhpValueObject\DateTime\LocalDateRange;
9+
use WizDevelop\PhpValueObject\DateTime\RangeType;
910

1011
require_once __DIR__ . '/../../vendor/autoload.php';
1112

1213
// 1. 基本的な使用例:月間の範囲
1314
echo "=== 基本的な使用例 ===\n";
1415
$startOfMonth = LocalDate::of(2024, 1, 1);
1516
$endOfMonth = LocalDate::of(2024, 1, 31);
16-
$january = LocalDateRange::closed($startOfMonth, $endOfMonth);
17+
$january = LocalDateRange::from($startOfMonth, $endOfMonth);
1718

1819
echo "1月の期間: {$january->toISOString()}\n";
1920
echo "日数: {$january->days()}\n\n";
2021

2122
// 2. 開区間と閉区間の違い
2223
echo "=== 開区間と閉区間の違い ===\n";
23-
$closedWeek = LocalDateRange::closed(
24+
$closedWeek = LocalDateRange::from(
2425
LocalDate::of(2024, 1, 1),
25-
LocalDate::of(2024, 1, 7)
26+
LocalDate::of(2024, 1, 7),
27+
RangeType::CLOSED,
2628
);
27-
$openWeek = LocalDateRange::open(
29+
$openWeek = LocalDateRange::from(
2830
LocalDate::of(2024, 1, 1),
29-
LocalDate::of(2024, 1, 7)
31+
LocalDate::of(2024, 1, 7),
32+
RangeType::OPEN,
3033
);
3134

3235
echo "閉区間(両端含む): {$closedWeek->toISOString()} = {$closedWeek->days()}\n";
@@ -35,9 +38,10 @@
3538
// 3. 半開区間の使用例(一般的な日付範囲の表現)
3639
echo "=== 半開区間の使用例 ===\n";
3740
// 月初から月末まで(月末を含まない一般的なパターン)
38-
$month = LocalDateRange::halfOpenRight(
41+
$month = LocalDateRange::from(
3942
LocalDate::of(2024, 1, 1),
40-
LocalDate::of(2024, 2, 1)
43+
LocalDate::of(2024, 2, 1),
44+
RangeType::HALF_OPEN_RIGHT,
4145
);
4246

4347
echo "1月(右半開区間): {$month->toISOString()}\n";
@@ -46,30 +50,34 @@
4650

4751
// 4. 日付の反復処理
4852
echo "=== 日付の反復処理 ===\n";
49-
$weekRange = LocalDateRange::closed(
53+
$weekRange = LocalDateRange::from(
5054
LocalDate::of(2024, 1, 1),
51-
LocalDate::of(2024, 1, 7)
55+
LocalDate::of(2024, 1, 7),
56+
RangeType::CLOSED,
5257
);
5358

5459
echo "1週間の日付:\n";
55-
foreach ($weekRange->iterate() as $date) {
60+
foreach ($weekRange->getIterator() as $date) {
5661
echo " - {$date->toISOString()}\n";
5762
}
5863
echo "\n";
5964

6065
// 5. 期間の重なり判定
6166
echo "=== 期間の重なり判定 ===\n";
62-
$q1 = LocalDateRange::closed(
67+
$q1 = LocalDateRange::from(
6368
LocalDate::of(2024, 1, 1),
64-
LocalDate::of(2024, 3, 31)
69+
LocalDate::of(2024, 3, 31),
70+
RangeType::CLOSED,
6571
);
66-
$q2 = LocalDateRange::closed(
72+
$q2 = LocalDateRange::from(
6773
LocalDate::of(2024, 4, 1),
68-
LocalDate::of(2024, 6, 30)
74+
LocalDate::of(2024, 6, 30),
75+
RangeType::CLOSED,
6976
);
70-
$marchToMay = LocalDateRange::closed(
77+
$marchToMay = LocalDateRange::from(
7178
LocalDate::of(2024, 3, 1),
72-
LocalDate::of(2024, 5, 31)
79+
LocalDate::of(2024, 5, 31),
80+
RangeType::CLOSED,
7381
);
7482

7583
echo "第1四半期: {$q1->toISOString()}\n";
@@ -81,9 +89,9 @@
8189

8290
// 6. 特定の日付が期間内かチェック
8391
echo "=== 期間内チェック ===\n";
84-
$vacation = LocalDateRange::closed(
92+
$vacation = LocalDateRange::from(
8593
LocalDate::of(2024, 8, 10),
86-
LocalDate::of(2024, 8, 20)
94+
LocalDate::of(2024, 8, 20),
8795
);
8896
$checkDate = LocalDate::of(2024, 8, 15);
8997

@@ -94,7 +102,8 @@
94102
echo "=== エラーハンドリング ===\n";
95103
$invalidResult = LocalDateRange::tryFrom(
96104
LocalDate::of(2024, 12, 31),
97-
LocalDate::of(2024, 1, 1)
105+
LocalDate::of(2024, 1, 1),
106+
RangeType::CLOSED,
98107
);
99108

100109
if ($invalidResult->isErr()) {
@@ -108,16 +117,12 @@
108117
$startDate = LocalDate::of(2024, 1, 1);
109118
$endDate = null;
110119

111-
$optionRange = LocalDateRange::fromNullable($startDate, $endDate);
112-
if ($optionRange->isNone()) {
113-
echo "範囲を作成できませんでした(いずれかの値がnullです)\n";
114-
}
115-
116120
// 9. 年間カレンダーの例
117121
echo "\n=== 年間カレンダーの例 ===\n";
118-
$year2024 = LocalDateRange::closed(
122+
$year2024 = LocalDateRange::from(
119123
LocalDate::of(2024, 1, 1),
120-
LocalDate::of(2024, 12, 31)
124+
LocalDate::of(2024, 12, 31),
125+
RangeType::CLOSED,
121126
);
122127

123128
echo "2024年: {$year2024->toISOString()}\n";

src/DateTime/LocalDate.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ final public static function tryFromNullable(?DateTimeInterface $value): Result
146146
return static::tryFrom($value)->map(static fn ($result) => Option\some($result));
147147
}
148148

149-
final public static function now(DateTimeZone $timeZone): static
149+
final public static function now(DateTimeZone $timeZone = new DateTimeZone('Asia/Tokyo')): static
150150
{
151151
$value = new DateTimeImmutable('now', $timeZone);
152152

@@ -155,6 +155,11 @@ final public static function now(DateTimeZone $timeZone): static
155155
return static::of($year, $month, $day);
156156
}
157157

158+
final public static function max(): static
159+
{
160+
return static::of(self::MAX_YEAR, 12, 31);
161+
}
162+
158163
/**
159164
* Obtains an instance of `LocalDate` from the epoch day count.
160165
*
@@ -260,8 +265,6 @@ className: static::class,
260265
);
261266
}
262267

263-
264-
265268
return Result\ok(true);
266269
}
267270

@@ -409,6 +412,11 @@ final public function compareTo(self $that): int
409412
return 0;
410413
}
411414

415+
final public function is(self $that): bool
416+
{
417+
return $this->compareTo($that) === 0;
418+
}
419+
412420
final public function isBefore(self $that): bool
413421
{
414422
return $this->compareTo($that) === -1;

0 commit comments

Comments
 (0)