トップページ > サイト作成 > PHP > PHP で日付など 1 桁数値を 2 桁(0 埋め)にするプログラムの書き方

PHP で日付など 1 桁数値を 2 桁(0 埋め)にするプログラムの書き方

PHP で日付をデータベースで取り扱う場合、YYYY-MM-DD の形式であることが必要だが、もし 1 月のように数値が 1 桁の場合は 01 としなければならないため 1 桁となっている数値を 2 桁(0 埋め)にするプログラムの書き方について紹介する。

PHP で日付など 1 桁数値を 2 桁(0 埋め)にするプログラムの書き方

1. 数値の 0 埋めとは

数値の 0 埋めとは 0 から 9 まで 10 未満の 1 桁の数値を 01, 02 のように冒頭に 0 を付与して 2 桁の扱いにするものである。
もし取り扱う最大値が 999 のように 3 桁の場合は文字数が 3 文字に合わすように 0 埋めすると 001, 002 のように 0 を 2 つ付与する形になる。

2. 日付を 0 埋めする

日付を 0 埋めする場合、下記のように PHP の関数「date」と「strtotime」を利用すると 0 埋めすることができる。
「strtotime」は英文形式の日付を Unix のタイムスタンプに変換するものであり、変換したタイムスタンプを「data」を用いてそのオプション内で指定する形式に変換を行っている。

<?php
$test_date = "2019-01-3";
echo date( 'Y/m/d', strtotime( $test_date ) );
?>

上記のコードを実行すると結果は「2019/01/03」が表示される。
月に該当する 01 は既に 0 埋めされているのでそのままとなり、日に該当する 3 は 1 桁なので 0 埋めされて 03 になっているのが確認できる。

3. 関数「strtotime」で有り得ない日付を指定した場合

関数「strtotime」を有り得ない日付で下記のように指定した場合はどうなるか確認する。

<?php
$test_date = "2019-13-3";
echo date( 'Y/m/d', strtotime( $test_date ) );
?>

上記のコードを実行すると結果は「1970/01/01」が表示される。
月に該当する箇所に現実に存在しない 13 月があるため正常に 0 埋めすることができずに日付の初期値となる 1970/01/01 が結果として返るようになっている。

4. 関数「strtotime」で有り得ない日付だが変換できる場合

次いで、上記と同じくカレンダー上では有り得ない日付を指定するが、場合によっては 0 埋めされて変換される場合がある。

<?php
$test_date = "2019-4-31";
echo date( 'Y/m/d', strtotime( $test_date ) );
?>

上記のコードを実行すると結果は「2019/05/01」が表示される。
カレンダー上では 4 月は 30 日までなので関数「strtotime」に与えた 4-31 は有り得ないのだが、31 日は他の月にあることもあり 30 日の翌日、すなわち「2019/05/01」が返る仕様になっている。
ただし、32 日を指定すると他の月にも存在しないため 1970/01/01 が結果として返る。

関連記事