[PHP]date_parse_from_format()関数完全解説!指定フォーマットで日付を解析しよう

PHP

こんにちは!今回は、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);

💡 主なフォーマット文字

文字説明
Y4桁の年
y2桁の年
m月(01-12)
n月(1-12)
d日(01-31)
j日(1-31)
H24時間形式(00-23)
h12時間形式(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()の主な特徴:

  • 指定フォーマットでの日付解析
  • 詳細なエラー情報の提供
  • 柔軟なフォーマット指定
  • バリデーション機能の組み込み

活用シーン:

  • カスタム日付フォーマットの処理
  • 日付入力のバリデーション
  • 国際化対応
  • データ変換処理
タイトルとURLをコピーしました