• 追加された行はこの色です。
  • 削除された行はこの色です。
#author("2019-06-11T22:35:15+00:00","default:sagasite","sagasite")
#author("2019-06-11T23:41:24+00:00","default:sagasite","sagasite")
[[PHP]] > Tips > PHPで日付整形

*やりたいこと [#k49afa8d]
日付のデータを整形する。

**正しい日付 [#j1099819]
 2019-06-12
4桁の年、2桁の月、2桁の日が「-」(ハイフン、マイナス記号)で連結されている形にしたい。

**不完全な日付 [#f03085c6]
 2019
4桁の年だけ。月と日が欠落している。
 2019-06
4桁の年と2桁の月だけ。日が欠落している。

*自作関数 [#x3d2d5ef]
不完全な日付データを正しい日付データの形に整える関数を自作してみよう。
欠落している月や日は、とりあえず1月や1日にしておく。

#code(php){{
<?php
/**
 * format date
 * 2019-06-12
 *
 * @param  string
 * @return string
 */
public function format_date($date = NULL)
{
    // split string
    $element = explode('-', $date); // 2019-06-12
    $year  = (int)@$element[0]; // 2019
    $month = (int)@$element[1]; // 06
    $day   = (int)@$element[2]; // 12
    // set default value
    if ($year == 0) $year = 1;
    if ($month == 0) $month = 1;
    if ($day == 0) $day = 1;
    // format with PHP DateTime Class
    $d = new DateTime();
    $d->setDate($year, $month, $day);
    $format_date = $d->format('Y-m-d');
    return $format_date;
}
?>
}}

* 実行例(PHP Version 7.2.13) [#bdd89cb0]
2019-06-12 -> 2019-06-12
2019-06 -> 2019-06-01
2019 -> 2019-01-01
1234-56-78 -> 1238-10-17
2000-01-32 -> 2000-02-01
2000-13-01 -> 2001-01-01
9999-9999-9999 -> 10859-07-16
(空白) -> 0001-01-01
0 -> 0001-01-01
1 -> 0001-01-01
2 -> 0002-01-01
1901 -> 1901-01-01
1902 -> 1902-01-01
1755 -> 1755-01-01
1755-09 -> 1755-09-01
1755-09-28 -> 1755-09-28
1902 -> 1902-01-01
4-5-6 -> 0004-05-06
a-b-c -> 0001-01-01

*参考 [#q7bc2aaf]
- PHP: DateTime - Manual https://www.php.net/manual/ja/class.datetime.php
- PHPで日付や時刻をフォーマットする(1月1日、1/1など) https://www.flatflag.nir87.com/date-473#strtotime-3
- DateTime クラスのまとめメモ - Qiita https://qiita.com/re-24/items/c3ed814f2e1ee0f8e811



トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS