#背景
カレンダーを作成中、予定を入力したときにカレンダー内に表示させようとしたところ、日付のフォーマットが違って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'];
?>
このフォームに入力された日付は、デフォルトでyyyy-mm-dd
の形式で表示される。
つまり2022年1月1日を選択して送信すると、2022-01-01
と表示される。(ここでは$_POST
で取得していますが、filter_input()
などを使う方が良いです。)
やりたかったのは、この日付表示を別の形式に直して、if
文などで使いやすくすること。(自分はY-n-j、つまり2022-01-01
表示を2022-1-1
表示にしたかった。)
##date関数
yyyy-mm-dd
以外のフォーマットで日付が欲しいときは、date()
を使用してフォーマットを整えてあげる必要がある。
<?php
date(変換後のフォーマット, タイムスタンプ(無くてもいい));
?>
第1引数には、変換後のフォーマット文字列
第2引数には、タイムスタンプ(書かない場合は、現在時刻が使用される)
※ タイムスタンプ:正確にはUNIXタイムスタンプと言うらしい。協定世界時(UTC)での1970年1月1日0時0分0秒からの経過時間を秒数で表したもの。つまり、これを書かないと、1970年1月1日0時0分0秒から現在時刻までの秒数が自動的に第2引数になる。
と言うことで、date
関数を使用して2022-1-1
と表示させるため下記のように入力すると、エラーが発生する。
<?php
$day = $_POST['day'];
echo date("Y-n-j", $day);
?>
いろいろ書いてあるが、要はdate()
の第2引数の型はinteger
でなければならないですよ、と言うことである。
input
タグのtype
属性の値date
で取得した日付は、string
型になっているため、上記のように直接第2引数とはできずエラー発生となった。
input type="date"のドキュメント
##strtotime関数
取得した日付をint
型にするために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/>";
}
#参考URL
1.date関数ドキュメント
2.input type="date"のドキュメント
3.strtotime関数ドキュメント
4.タイムスタンプについて