【PHP/Laravel】<input>で入力した日時をタイムスタンプに変換

日にちの場合(type="date")

<form action="{{ route('form') }}" method="post">
  @csrf
  <div class="form-group">
    <label for="date2" class="col-form-label">日にちを入力</label>
    <input type="date" class="form-control" id="date2" name="date2">
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">送信</button>
  </div>
</form>

<div class="my-2">
  <p>入力した日時のタイムスタンプ</p>
  <p class="pl-4">{{ $date ?? '' }}</p>
</div>

f:id:bonoponz:20201016205903p:plain

日にちを入力できますね。

しかし時刻の入力はできません。

時刻の場合(type="time")

<form action="{{ route('form') }}" method="post">
  @csrf
  <div class="form-group">
    <label for="date3" class="col-form-label">時刻を入力</label>
    <input type="time" class="form-control" id="date3" name="date3">
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">送信</button>
  </div>
</form>

<div class="my-2">
  <p>入力した日時のタイムスタンプ</p>
  <p class="pl-4">{{ $date ?? '' }}</p>
</div>

f:id:bonoponz:20201016210042p:plain

時刻は入力できますが、今度は日にちが入力できません。

日時を共に入力(type="datetime-local")

日付と時刻が同時に入力できます。

<form action="{{ route('form') }}" method="post">
  @csrf
  <div class="form-group">
    <label for="date" class="col-form-label">日時を入力</label>
    <input type="datetime-local" class="form-control" id="date" name="date">
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">送信</button>
  </div>
</form>

f:id:bonoponz:20201016211033p:plain

入力した値を出力するとどうなるか見てみましょう。

入力した値を表示できるように、$requestプロパティを用いてコントローラーで値を渡します。

public function sample(Request $request){
  $date = $request->input('date');

  return view('/sample',[
    'date' => $date,
  ]);
}

f:id:bonoponz:20201016211051p:plain

入力し送信ボタン、ぽち。

f:id:bonoponz:20201016211110p:plain

日付と時刻が出ました。

これで問題ないことも多いでしょうが、タイムスタンプとして使いたい場合もあります。

そこで使うのがstrtotimeメソッドです。

注意点

type="date"type="datetime-local"はもしかしたらIE(Internet Explorer)ではカレンダーが出てこないかもしれません。

手入力で問題なければ関係ありませんが、カレンダーを使って日にちを選択したい場合には注意が必要です。

strtotimeメソッド(タイムスタンプ に変換)

<form action="{{ route('form') }}" method="post">
  @csrf
  <div class="form-group">
    <label for="date" class="col-form-label">日時を入力</label>
    <input type="datetime-local" class="form-control" id="date" name="date">
  </div>
  <div class="form-group">
    <button type="submit" class="btn btn-primary">送信</button>
  </div>
</form>

<div class="my-2">
  <p>入力した日時のタイムスタンプ</p>
  <p class="pl-4">{{ $date ?? '' }}</p>
</div>

コントローラー内で、strtotimeメソッドを使って入力された時刻をタイムスタンプに変換します。

public function sample(Request $request){
  $date = strtotime($request->input('date')); // 変更

  return view('/sample',[
    'date' => $date,
  ]);
}

f:id:bonoponz:20201016205006p:plain

入力し送信ボタン、ぽち。

f:id:bonoponz:20201016205015p:plain

入力した日時がタイムスタンプに変換されて表示されました!

とっても簡単ですね。

どれでも使える

typeが変わっても、同様jにタイムスタンプに変換できます。

f:id:bonoponz:20201016223256p:plain

参考URL

PHPの日時操作クラスと関数で日付・時間をスムーズに扱う