🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

4回答

4162閲覧

文字列を時間に変換する

ms5025

総合スコア292

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

1クリップ

投稿2021/01/18 00:31

前提・実現したいこと

文字列を時間に変換したいです

// 日付文字列 $date = '1999-02-22' // 時間文字列 $time = '9' 例) 9,16のような時間の部分のみの数値 9 -> 9:00 16 ->16:00 と言う意図

この文字列をつなげて

'1999-02-22 9:00'

のような日付型に変換したいです。

試したこと

date('Y-m-d H:i:s', (int) strtotime($date . $time . ':00'))

これで正しい結果は得られましたが、
':00'の文字列を結合する以外に綺麗な書き方はあるでしょうか?
例えば9や16だけで時間に変換してくれる物とか・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/18 00:46

Laravel関係ありますか?
ms5025

2021/01/18 00:51

フレームワークはLaravelを使っています 情報としてフレームワーク独自のものがあればそれを利用しようかと思っただけです phpの場合はfuel使っていればfuel、zend使っていればzendタグをいれるようにしています
m.ts10806

2021/01/18 00:53

提示されたコードと要件との関連性がないです。
m.ts10806

2021/01/18 00:53

例えLaravelであったとしても終端;なしに動くわけじゃないですよね。
guest

回答4

0

PHP

1$date = '1999-02-22'; 2$d=explode('-',$date); 3$time = '9'; 4print date('Y-m-d G:i:s',mktime($time,0,0,$d[1],$d[2],$d[0]));

投稿2021/01/18 01:38

yambejp

総合スコア116688

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2021/01/18 05:51

ありがとうございます! 文字列加工して使う感じですね!
guest

0

PHP: strtotime - Manual
PHP: 複合的な書式 - Manual

strtotime()が解釈できる日付時刻文字列を正しく生成できているかをチェックする必要があります。

php

1<?php 2 3// 日付文字列 4$date = '1999-02-22'; 5 6// 時間文字列 7$time = '9'; 8 9$datetime = $date . $time . ':00'; 10echo $datetime; 11 12//echo date('Y-m-d H:i:s', (int) strtotime($datetime)); 13

とすると、結果は

1999-02-229:00

となるため、日と時の値次第では解釈がおかしくなる可能性を含んでいます。

$datetime = $date . ' ' . $time . ':00:00';

などとすれば良さそうな気がします。

それと、余計なお世話かもしれませんが、
日付文字列や時刻をフォーム送信データから受け付ける前提だとしたら、
へんてこな日付が与えられないよう、
PHP: checkdate - Manualでの検査を加えるなどして、32日とか13月とか与えられないようにしたいかな。

投稿2021/01/18 01:07

編集2021/01/18 01:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/18 01:23

やはりチェック含めて独自に作り込む必要ありですね。
退会済みユーザー

退会済みユーザー

2021/01/18 01:28

2月29日があるかどうか、とか考えると、そこに神経を使いたいと思う。
ms5025

2021/01/18 05:47

ありがとうございます。 $datetime = $date . '  ' . $time . ':00' とする予定でした。 $datetime = $date . ' ' . $time . ':00:00'; とします。 チェックロジックはまた別問題として、 今回の質問の答えとしては、文字列結合で対応するしかないって感じでしょうかね?
guest

0

Laravel 使っているなら、Carbon 一択でしょう。

php

1$date = '1999-02-22'; 2$carbon = Carbon::make($date); 3 4$hour = 9; 5$carbon->setHour($hour); 6 7dd($carbon->format('Y-m-d H:i:s'));

投稿2021/01/23 02:31

phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Laravel関係ないのと、PHPとして動かないコードを提示されても回答する側は困るのですが、

9や16だけで時間に変換してくれる物

「日付」「時」を引数としてそのフォーマットに変換する関数を自分で用意する。

投稿2021/01/18 00:51

編集2021/01/18 00:52
m.ts10806

総合スコア80875

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ms5025

2021/01/18 00:54

結局フレームワーク独自のいい感じのものはないって事ですね それに関しては「試した事」で行ってる事以上のことはないと言う認識でしょうか? ちなみに自分は date('Y-m-d H:i:s', (int) strtotime($date . $time . ':00')) しましたが貴方ならどう書きますか?
m.ts10806

2021/01/18 00:58

回答に書いてますよ。 ------------------ 「日付」「時」を引数としてそのフォーマットに変換する関数を自分で用意する。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問