こんにちは!今回は、PHPの日付処理で使用されるdate_parse_from_format()
関数について詳しく解説していきます。
📅 date_parse_from_format()とは?
date_parse_from_format()
は、指定したフォーマットに従って日付文字列を解析し、その構成要素を配列として返す関数です。
🔰 基本的な使用法
$format = 'Y-m-d H:i:s';
$date = '2024-01-15 14:30:45';
$parsed = date_parse_from_format($format, $date);
print_r($parsed);
💡 主なフォーマット文字
文字 | 説明 |
---|---|
Y | 4桁の年 |
y | 2桁の年 |
m | 月(01-12) |
n | 月(1-12) |
d | 日(01-31) |
j | 日(1-31) |
H | 24時間形式(00-23) |
h | 12時間形式(01-12) |
i | 分(00-59) |
s | 秒(00-59) |
🎯 実践的な使用例
1. カスタムフォーマットの解析
function parseCustomDate($dateString, $format) {
$parsed = date_parse_from_format($format, $dateString);
if ($parsed['error_count'] > 0) {
return [
'success' => false,
'errors' => $parsed['errors']
];
}
return [
'success' => true,
'components' => [
'year' => $parsed['year'],
'month' => $parsed['month'],
'day' => $parsed['day'],
'hour' => $parsed['hour'],
'minute' => $parsed['minute'],
'second' => $parsed['second']
]
];
}
// 使用例
$result = parseCustomDate('15/01/2024', 'd/m/Y');
2. 日本語フォーマットの解析
function parseJapaneseDate($dateString) {
$format = 'Y年m月d日 H時i分s秒';
$parsed = date_parse_from_format($format, $dateString);
if ($parsed['error_count'] === 0) {
return sprintf(
'%04d-%02d-%02d %02d:%02d:%02d',
$parsed['year'],
$parsed['month'],
$parsed['day'],
$parsed['hour'],
$parsed['minute'],
$parsed['second']
);
}
return false;
}
// 使用例
echo parseJapaneseDate('2024年01月15日 14時30分45秒');
📝 バリデーションと解析
1. 厳密な日付バリデーション
function validateStrictDate($dateString, $format) {
$parsed = date_parse_from_format($format, $dateString);
return [
'valid' => ($parsed['error_count'] === 0 && $parsed['warning_count'] === 0),
'errors' => $parsed['errors'],
'warnings' => $parsed['warnings']
];
}
2. 複数フォーマットの対応
function parseMultipleFormats($dateString) {
$formats = [
'Y-m-d',
'd/m/Y',
'Y.m.d',
'Y年m月d日'
];
foreach ($formats as $format) {
$parsed = date_parse_from_format($format, $dateString);
if ($parsed['error_count'] === 0) {
return [
'success' => true,
'format' => $format,
'parsed' => $parsed
];
}
}
return ['success' => false];
}
⚠️ エラー処理とデバッグ
function debugDateParse($dateString, $format) {
$parsed = date_parse_from_format($format, $dateString);
$debug = [
'input' => [
'string' => $dateString,
'format' => $format
],
'output' => $parsed,
'status' => [
'has_errors' => ($parsed['error_count'] > 0),
'has_warnings' => ($parsed['warning_count'] > 0)
]
];
if ($parsed['error_count'] > 0) {
$debug['errors'] = $parsed['errors'];
}
if ($parsed['warning_count'] > 0) {
$debug['warnings'] = $parsed['warnings'];
}
return $debug;
}
💡 応用テクニック
1. 日付コンバーター
class DateConverter {
private $sourceFormat;
private $targetFormat;
public function __construct($sourceFormat, $targetFormat) {
$this->sourceFormat = $sourceFormat;
$this->targetFormat = $targetFormat;
}
public function convert($dateString) {
$parsed = date_parse_from_format($this->sourceFormat, $dateString);
if ($parsed['error_count'] > 0) {
return false;
}
$date = new DateTime();
$date->setDate($parsed['year'], $parsed['month'], $parsed['day']);
$date->setTime($parsed['hour'] ?? 0, $parsed['minute'] ?? 0, $parsed['second'] ?? 0);
return $date->format($this->targetFormat);
}
}
// 使用例
$converter = new DateConverter('Y/m/d', 'Y年m月d日');
echo $converter->convert('2024/01/15');
2. 日付抽出ユーティリティ
function extractDateParts($dateString, $format, $parts = ['year', 'month', 'day']) {
$parsed = date_parse_from_format($format, $dateString);
if ($parsed['error_count'] > 0) {
return false;
}
$result = [];
foreach ($parts as $part) {
if (isset($parsed[$part])) {
$result[$part] = $parsed[$part];
}
}
return $result;
}
まとめ
date_parse_from_format()
の主な特徴:
- 指定フォーマットでの日付解析
- 詳細なエラー情報の提供
- 柔軟なフォーマット指定
- バリデーション機能の組み込み
活用シーン:
- カスタム日付フォーマットの処理
- 日付入力のバリデーション
- 国際化対応
- データ変換処理