[PHP]date_parse()関数完全解説!日付文字列を解析しよう

PHP

こんにちは!今回は、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()の主な特徴:

  • 様々な日付形式を解析可能
  • 詳細な日付成分を取得可能
  • エラーと警告の情報を提供
  • 柔軟な日付処理に活用可能

活用シーン:

  • フォームからの日付入力の処理
  • 日付のバリデーション
  • カスタム日付フォーマット
  • 日付の比較処理

タイトルとURLをコピーしました