トップページ > プログラム > PHP > PHP で日付のスラッシュで分割して配列に入れるプログラムの書き方

PHP で日付のスラッシュで分割して配列に入れるプログラムの書き方

PHP で日付を取り扱う場合、YYYY-MM-DD や YYYY/MM/DD のように年月日をハイフンやスラッシュで区切る形式であることが多いが、これらの形式から年月日それぞれを分割して配列に入れるプログラムの書き方について紹介する。

PHP で日付のスラッシュで分割して配列に入れるプログラムの書き方

1. 日付の分割とは

日付の分割とは、2021-07-16 のように年月日の数値の間にハイフンやスラッシュがある YYYY-MM-DD の形式から、年・月・日のそれぞれの値を分割して取得するものである。

データべースのカラムを日付型で作成した場合は、入れる値は YYYT-MM-DD の形式でなければならないため、データベースから日付を取得して年だけ、月だけ、日だけを抽出したい場合に次の方法で取得することができる。

2. 日付を分割して配列に入れる方法

日付を年月日それぞれで分割する場合、下記のように PHP の関数「preg_match」を利用するとハイフンやスラッシュなど指定する文字で分割するとともに、同時に分割した文字を配列に入れることができる。
下記の PHP のコードはスラッシュで区切られた日付を年・月・日に分割したものである。

<?php
$setDate = '2021/7/8';
$dateArr = array();
preg_match( "/([0-9]{1,4})\/([0-9]{1,2})\/([0-9]{1,2})/", $setDate, $dateArr );

echo $dateArr[0] . "\n"; // 2021/7/8 が表示
echo $dateArr[1] . "\n"; // 2021 が表示
echo $dateArr[2] . "\n"; // 7 が表示
echo $dateArr[3] . "\n"; // 8 が表示
?>

関数「preg_match」に指定する一つ目のオプション値は元なる値で分割したい箇所(マッチさせるパターン)を正規表現で指定している。
正規表現でマッチさせるパターンを指定するためにデミリタと呼ばれる記号文字で挟む必要があり、一般的にスラッシュが用いられる。
ところが、今回は元となる日付にもスラッシュがあるため、\ でエスケープしている。
デミリタをスラッシュ以外にすると下記のようにスラッシュをエスケープする必要が無くなる。

preg_match( "@([0-9]{1,4})/([0-9]{1,2})/([0-9]{1,2})@", $setDate, $dateArr );

また、上記では日付の月と日が 1 桁の場合の分割であるが、正規表現で年は 1 から 4 桁、月は 1 から 2 桁、日も 1 から 2 桁の範囲を持たせているため下記のように 0 埋めされた日付でおいても問題無く分割して配列に格納される。

<?php
$setDate = '2021/07/08';
$dateArr = array();
preg_match( "/([0-9]{1,4})\/([0-9]{1,2})\/([0-9]{1,2})/", $setDate, $dateArr );

echo $dateArr[0] . "\n"; // 2021/07/08 が表示
echo $dateArr[1] . "\n"; // 2021 が表示
echo $dateArr[2] . "\n"; // 07 が表示
echo $dateArr[3] . "\n"; // 08 が表示
?>

関連記事

@webolve をフォローしてください