LoginSignup
7
16

More than 5 years have passed since last update.

[php]日付情報を年月日に分割して配列に入れる

Last updated at Posted at 2015-06-20

書き方色々あります

正規表現で地道にやるなら、preg_matchを使う。

※記事下のコメントで、@tadsanさんがDateTime::createFromFormat()を使う方法を書いて下さいました。
※さらにコメントで、@ktty1220さんがexplode()を使う方法を書いて下さいました。

日付情報の前提条件

・年,月,日以外の情報が入っていない事(曜日とか時間とか)
・斜線または"年月日"で区切られている事

preg_matchで書くなら

preg_match()の引数の入れ方

preg_match("分割する条件", 分割したい値や変数, 分割した値を入れる配列);
第1引数 … 条件全体と、()で囲んだ部分がマッチする。
第2引数 … 下の例では変数を使っているが、そのまま値も入れられる
第3引数 … [0]に全体が入り、[1]には一番左の()にマッチしたもの、[2]はその隣の()にマッチにしたものが入る。

yyyy/mm/ddタイプの例

index.php
$set_date = '2015/5/8';
$date = array();

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

echo $date[0]; // 2015/5/8
echo $date[1]; // 2015
echo $date[2]; // 5
echo $date[3]; // 8

yyyy年mm月dd日タイプの例

index.php
$set_date = '2015/5/8';
$date = array();

preg_match("/([0-9]{4,})年([0-9]{1,2})月([0-9]{1,2})日/",$set_date,$date);

echo $date[0]; // 2015/5/8
echo $date[1]; // 2015
echo $date[2]; // 5
echo $date[3]; // 8

追記

@ngyuki さんからご指摘いただきました。
年が4桁限定だと、遥か未来に不具合になります確かに。
ありがとうございます。記事修正済みです。

@tadsan さんからご指摘いただきました。
DateTime::createFromFormat()での書き方ありがとうございます。
デリミタが変更できるのは初めて知りました!
そもそもデリミタが何かを知りませんでした(^^;)
ありがとうございます。記事修正済みです。

@ktty1220 さんからご指摘いただきました。
explode()での書き方ありがとうございます。
確かに、区切り文字が同じなら、わざわざ正規表現使うは必要ないですね!
ありがとうございます。記事修正済みです。
以上。
他にもなにかご指摘有ればコメント下さいませ。

7
16
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
16