LoginSignup
0

More than 1 year has passed since last update.

【HTML】【PHP】<input type="date">で取得した日付フォーマットの変更の仕方について

Last updated at Posted at 2022-01-15

背景

カレンダーを作成中、予定を入力したときにカレンダー内に表示させようとしたところ、日付のフォーマットが違ってif文が働かなかったので、同じところで悩まないように備忘録兼ねて作成

やりたかったこと

日付を取得するフォーム
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="" method="post">
        <input type="date" name="day">
        <button type="submit">送信</button>
    </form>
</body>
</html>

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
    echo $_POST['day'];
?>

スクリーンショット 2022-01-15 18.26.18.png
このフォームに入力された日付は、デフォルトでyyyy-mm-ddの形式で表示される。
つまり2022年1月1日を選択して送信すると、2022-01-01と表示される。(ここでは$_POSTで取得していますが、filter_input()などを使う方が良いです。)
やりたかったのは、この日付表示を別の形式に直して、if文などで使いやすくすること。(自分はY-n-j、つまり2022-01-01表示を2022-1-1表示にしたかった。)

スクリーンショット 2022-01-15 19.39.27.png
スクリーンショット 2022-01-15 19.44.24.png

date関数

yyyy-mm-dd以外のフォーマットで日付が欲しいときは、date()を使用してフォーマットを整えてあげる必要がある。

date関数
<?php
  date(変換後のフォーマット, タイムスタンプ無くてもいい);
?>

第1引数には、変換後のフォーマット文字列
第2引数には、タイムスタンプ(書かない場合は、現在時刻が使用される)
※ タイムスタンプ:正確にはUNIXタイムスタンプと言うらしい。協定世界時(UTC)での1970年1月1日0時0分0秒からの経過時間を秒数で表したもの。つまり、これを書かないと、1970年1月1日0時0分0秒から現在時刻までの秒数が自動的に第2引数になる。

と言うことで、date関数を使用して2022-1-1と表示させるため下記のように入力すると、エラーが発生する。

date関数
<?php
  $day = $_POST['day'];
  echo date("Y-n-j", $day);
?>

スクリーンショット 2022-01-15 21.32.07.png

いろいろ書いてあるが、要はdate()の第2引数の型はintegerでなければならないですよ、と言うことである。
inputタグのtype属性の値dateで取得した日付は、string型になっているため、上記のように直接第2引数とはできずエラー発生となった。
input type="date"のドキュメント

strtotime関数

取得した日付をint型にするためにstrtotime()を使用する。

strtotime関数
<?php
  strtotime(変換したい日付の文字列, ベースタイムスタンプ無くてもいい);
?>

第1引数には、変換したい日付/時刻の文字列
第2引数には、返される値を計算するために使用されるベースタイムスタンプ(書かない場合は、現在時刻が使用される。例えば1日前の日付を取得する際なんかは、ここに'-01'を入れたりする。)

長々書いてきたが、要はフォーマットを変えたければ

<?php
  $day = $_POST['day'];
  echo date("Y-n-j", strtotime($day));
?>

としてあげれば良い。
以下、2022-01-01を変換した一例

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <form action="" method="post">
        <input type="date" name="day">
        <button type="submit">送信</button>
    </form>
</body>
</html>

<?php
if($_SERVER['REQUEST_METHOD'] === 'POST'){
    $day = $_POST['day'];
    echo date("F j, Y", strtotime($day)) . "<br/>";
    echo date("F j, Y", strtotime($day)) . "<br/>";
    echo date("m.d.y", strtotime($day)) . "<br/>";
    echo date("j, n, Y", strtotime($day)) . "<br/>";
    echo date("Ymd", strtotime($day)) . "<br/>";
    echo date("j-m-y", strtotime($day)) . "<br/>";
    echo date("D M j", strtotime($day)) . "<br/>";
    echo date("Y-m-d", strtotime($day)) . "<br/>";
    echo date("Y-n-j", strtotime($day)). "<br/>";
    echo date("Y年n月j日", strtotime($day)). "<br/>";
    echo date("Y/n/j", strtotime($day)). "<br/>";
}

スクリーンショット 2022-01-15 22.06.23.png

参考URL

1.date関数ドキュメント
2.input type="date"のドキュメント
3.strtotime関数ドキュメント
4.タイムスタンプについて

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
0