こんにちは!今回は、PHPの日付処理で便利なdate_parse()
関数について詳しく解説していきます。
📅 date_parse()とは?
date_parse()
は、日付文字列を解析して、その構成要素(年、月、日、時、分、秒など)を配列として返す関数です。
🔰 基本的な使用法
$date = date_parse('2024-01-15 14:30:45');
print_r($date);
💡 返り値の構造
Array
(
[year] => 2024
[month] => 1
[day] => 15
[hour] => 14
[minute] => 30
[second] => 45
[fraction] => 0
[warning_count] => 0
[warnings] => Array()
[error_count] => 0
[errors] => Array()
[is_localtime] => false
)
🎯 実践的な使用例
1. 基本的な日付解析
function parseDate($dateString) {
$parsed = date_parse($dateString);
if ($parsed['error_count'] > 0) {
return ['success' => false, 'errors' => $parsed['errors']];
}
return [
'success' => true,
'date' => sprintf(
'%04d-%02d-%02d %02d:%02d:%02d',
$parsed['year'],
$parsed['month'],
$parsed['day'],
$parsed['hour'],
$parsed['minute'],
$parsed['second']
)
];
}
// 使用例
print_r(parseDate('2024-01-15 14:30:45'));
2. 日付の妥当性チェック
function isValidDate($dateString) {
$parsed = date_parse($dateString);
return [
'valid' => ($parsed['error_count'] === 0),
'warnings' => $parsed['warnings'],
'errors' => $parsed['errors']
];
}
3. 日付成分の抽出
function extractDateComponents($dateString) {
$parsed = date_parse($dateString);
if ($parsed['error_count'] > 0) {
return false;
}
return [
'date' => [
'year' => $parsed['year'],
'month' => $parsed['month'],
'day' => $parsed['day']
],
'time' => [
'hour' => $parsed['hour'],
'minute' => $parsed['minute'],
'second' => $parsed['second']
]
];
}
📝 様々な日付形式の解析
1. 異なる日付形式の処理
function parseDifferentFormats() {
$formats = [
'2024-01-15', // ISO形式
'15/01/2024', // スラッシュ区切り
'January 15, 2024', // 英語形式
'2024.01.15 14:30:45', // ドット区切り
'20240115' // 数字のみ
];
$results = [];
foreach ($formats as $date) {
$results[$date] = date_parse($date);
}
return $results;
}
2. 日本語の日付解析
function parseJapaneseDate($dateString) {
// 日本語の日付を英語形式に変換
$dateString = str_replace(
['年', '月', '日'],
['-', '-', ''],
$dateString
);
return date_parse($dateString);
}
// 使用例
$result = parseJapaneseDate('2024年1月15日');
⚠️ エラー処理とバリデーション
function validateDateWithDetails($dateString) {
$parsed = date_parse($dateString);
$result = [
'valid' => ($parsed['error_count'] === 0),
'has_warnings' => ($parsed['warning_count'] > 0),
'components' => []
];
if ($result['valid']) {
$result['components'] = [
'year' => $parsed['year'],
'month' => $parsed['month'],
'day' => $parsed['day']
];
}
if ($parsed['error_count'] > 0) {
$result['errors'] = $parsed['errors'];
}
if ($parsed['warning_count'] > 0) {
$result['warnings'] = $parsed['warnings'];
}
return $result;
}
💡 応用テクニック
1. カスタム日付フォーマッタ
function formatCustomDate($dateString, $format = 'full') {
$parsed = date_parse($dateString);
if ($parsed['error_count'] > 0) {
return false;
}
$formats = [
'full' => '%04d年%02d月%02d日 %02d時%02d分%02d秒',
'date' => '%04d年%02d月%02d日',
'time' => '%02d時%02d分%02d秒'
];
return sprintf(
$formats[$format],
$parsed['year'],
$parsed['month'],
$parsed['day'],
$parsed['hour'],
$parsed['minute'],
$parsed['second']
);
}
2. 日付比較ユーティリティ
function compareDates($date1, $date2) {
$parsed1 = date_parse($date1);
$parsed2 = date_parse($date2);
if ($parsed1['error_count'] > 0 || $parsed2['error_count'] > 0) {
return false;
}
$timestamp1 = mktime(
$parsed1['hour'], $parsed1['minute'], $parsed1['second'],
$parsed1['month'], $parsed1['day'], $parsed1['year']
);
$timestamp2 = mktime(
$parsed2['hour'], $parsed2['minute'], $parsed2['second'],
$parsed2['month'], $parsed2['day'], $parsed2['year']
);
return $timestamp1 - $timestamp2;
}
まとめ
date_parse()
の主な特徴:
- 様々な日付形式を解析可能
- 詳細な日付成分を取得可能
- エラーと警告の情報を提供
- 柔軟な日付処理に活用可能
活用シーン:
- フォームからの日付入力の処理
- 日付のバリデーション
- カスタム日付フォーマット
- 日付の比較処理