• ベストアンサー

DateTime型に時間だけを加算したい

こんばんは。 phpで時間を処理したいと思っているのですが、 DateTime型が便利なので使っています。 時間だけを加算したい場合はどのようにすればよいのでしょうか? $date = new DateTime(); としたときに時間 "01:23:34" を加算したいのですが 日時を加算とかは事例が出てくるのですが時間だけと なると分かりません。 教えていただけないでしょうか。

  • PHP
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • Proof4
  • ベストアンサー率78% (151/192)
回答No.1

DateTimeオブジェクトに時間だけを加算する関数を作成しました。 DateInterval オブジェクトを作成し、DateTime::addを利用することで時間を加算することができます。 function addTime($date, $timeInterval){  $units = [];  // ':'で時,分,秒に分割  foreach(explode(':', $timeInterval) as $t){   // 先頭の0を除去して$unitsに追加   $trimmed = ltrim($t, '0');   $units[] = empty($trimmed) ? 0 : $trimmed;  }  // DateIntervalオブジェクトを作成し加算  $interval = new DateInterval("PT${units[0]}H${units[1]}M${units[2]}S");  return $date->add($interval); } $date = new DateTime(); echo date_format(addTime($date, '01:23:34'), 'Y/m/d H:i:s'); ※OKWAVEの仕様上、インデントを全角スペースで表現しています。コピペの際はご注意ください。 https://www.php.net/manual/ja/datetime.add.php https://www.php.net/manual/ja/dateinterval.construct.php

TeijigoTeatime
質問者

お礼

なるほど、DateInterval の使い方イマイチだったのですがとても参考になりました。 無事解決しました。 ありがとうございます。 ※ いろいろバタバタしてしまいお返事が遅れました。失礼いたしました。

関連するQ&A

  • datetime型の加算取得

    select文で、datetime型のカラムを取得する際に、特定の時間を加算して取得したいのですが、どのような書式になりますでしょうか、ご教授お願いします。 例 select ( datetime + '01:00:00') from user 時間単位の加算のみです

    • ベストアンサー
    • MySQL
  • DATETIME型からUNIX時間を求める方法

    現在、MYSQL、DATETIME型 YYYY-MM-DD HH:MM:SS からUNIX時間を求める際に、気軽に質問出来る詳しい方が知り合いにおらずPHP学習中で知識が乏しいため、YYY-MM-DD HH:MM:SS をスペースで分割、をハイフンで分割、HH:MM:SSをコロンで分割、その後、mktimeに当てはめてUNIX時間を求めています。 他に簡単にDATETIME型からUNIXTIME求める関数などがありましたらご教示頂けましたら嬉しいです。 それとも、計算が必要な日時をMYSQLに格納する場合はINSERTする場合にUNIX時間でINSERTし、表示が必要な場合に、DATE関数等で日時として表示する方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • MySQLのDatetime型の引き算

    ある機械の1日当たりの処理数を計算したいと思います。 Datetimeの引き算がうまくいかないので、解決方法を教えてください。 1日当たりの処理数は下記の式で計算できます。 1日当たりの処理数=期間内処理数÷((現在日時-作業開始日時)÷(60×60×24)) ※現在日時-作業開始日時で期間の秒数を計算 それを1日の秒数=86400秒(60秒×60分×24時間)で割る。 ------------------ 環境 MySQL:5.0.77 ------------------ テーブル: test カラム :num(INT型),start_date(DATETIME型) ※numは期間内の機械の処理数です。 まず、上記の1日当たりの処理数の数式をSQL文に反映させてみました。 SELECT num , num/((now()-start_date)/86400) as shorisu FROM test 結果は表示されるのですが、かなり大きな数値になって出てきてしまいます。 WEBで情報を検索したところ、DATETIME型を直接減算すると求める結果にならないことはわかりました。 MySQLのページ(11.5. 日付時刻関数) http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html を見てみましたが、どの関数を使えばよいのかいまいちわかりません。 now()-start_dateの部分が正しい値を返すようになれば良いのですが、どのような式を書けばよいのでしょうか?

    • ベストアンサー
    • PHP
  • DateTime型の表示

    初心者です。教えて下さい PHP+Pearで検索取得して 文字列型、数値型は表示出来るのですが、 DateTime型の表示がされません。文字列に変換する必要があるのでしょうか?どうすればよいですか? よろしくおねがいします。 <?php //省略 print("更新日時:" . $data['updateddatetime'] ); //省略 ?>

    • ベストアンサー
    • MySQL
  • SQLiteでのDateTimeの扱い

    SQLiteのデータベースにphpで値を保存したいのですが、カラムのタイプがdatetimeだと上手くいきません。 現在の時刻をSQLiteに書き込むということをしたいです。 カラムのタイプをdatetimeからtextに変更するのは避けたいので、下のphpを変更して書き込めるようにするにはどうすれば良いのでしょうか? 詳しい方よろしくお願いします。 SQLite DB ---- CREATE TABLE "dt" ("ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,"REGIST" DATETIME) ---- PHP ---- $sqlite = 'SQLiteへのパス'; $db = new PDO($sqlite); $now = date('Y-m-d H:i:s'); $nfe = $db->prepare('insert into dt(REGIST) values(?)'); $nfe->execute(array($now)); ----

  • datetime型の秒を切り捨てるには?

    PHP&MySQLで、日付時間入力のフォームを作成しています。 日付時間表示は、「2015年11時4分 7:00」という表示フォーマットにしたいのです。 日付時間入力フォームは、 https://www.softel.co.jp/blogs/tech/archives/4294 こちらを参考にして、datetimepickerのカレンダー入力に、時間入力を組み合わせたデモサンプルを利用しています。 年日時間を個別にデータベース管理する必要はなく、日時分まで管理したいことから、データベースのほうはひとつのカラムにdatetime型で定義しました。 datetimeなので、「2015-11-04 07:00:00」で格納されます。 そこからこの値をとりだして、画面表示させたいのですが、 「2015年11時4分 7:00」で表示させるために、秒を切り捨てたいのですが、 この場合どうすればいいのでしょうか? ************************** mySql:ver5.6 PHP:ver5.4 phpMyAdmin 3.4.9 型:datetime

    • ベストアンサー
    • PHP
  • datetime型で日付計算ができません。

    開始日時(start_date)の20日を経過したレコードを削除したいのですがSQLで行う方法がわかりません。 start_dateはMySQLのdatetime型です。 select * from test where start_date + 20days < now() な感じ消せると思ったのですが調べても方法が 見つかりませんでした。

    • ベストアンサー
    • MySQL
  • datetime型、未入力時の日時表示について

    PHP&MySQL初心者です。 同窓会の申し込みフォーム作成していますが、日時表示について質問です。 参加希望日時をカレンダー入力させて、データベースに登録しています。 日時はカラムを分けずにまとめてdatetime型にしています。 ■第一希望 [カレンダー入力](年月日時分をまとめて) ■第二希望 [カレンダー入力](年月日時分をまとめて) →データベース(mySQL)には、 datetime型「2016-01-05 02:50:00」形式で登録。 カレンダー入力せずにINSERTされたとき、datetime型だと、 「0000-00-00 00:00:00」で登録されますが、 この値を、date('Y年n月j日 g時i分', strtotime(カラム値)); で読み出すと、「1970 年 1 月 1 日 00:00:00」と表示されます。 このままではまずいので、単純に空欄としたいのです。 カレンダー入力されなかったとき、つまり、「0000-00-00 00:00:00」で登録されているとき、 日時表示を空欄にするスマートな方法はありますか?

    • ベストアンサー
    • PHP
  • 時間の加算と初期値・加算値をクッキーに保存

    WEB上で日程表を作成したいのですが日付・時刻の加算とクッキーに保存する方法が分かりませんので教えて下さい ┌──┬────┐ │値1 │加算値1 │ ├──┼────┤ │値2 │加算値2 │ ├──┼────┤ │値3 │加算値3 │ ├──┼────┤ │値4 │加算値4 │ ├──┼────┤ │値5 │加算値5 │ └──┴────┘ 上記の様な表をテーブルで作成します 値1はinputタグで任意の日時を入力(「2003/9/5 16:00」等) 加算値1以降はinputタグで任意の時間を入力(2時間の場合「2」等) 値2以降は計算結果を表示する 値1に「2003/9/5 16:00」と入力 加算値1に「2」と入力 値2は値1+24時間+加算値1=「2003/9/5 18:00」と表示される 値3は値2+24時間+加算値2=「2003/9/6 18:00」と表示される(加算値2は未入力) 値4は値3+24時間+加算値3=「2003/9/7 19:00」と表示される(加算値3は「1」入力) 以下同様 値1・加算値1以降のinputタグに入力した値をクッキーに保存する 仕様としては以上です 宜しくお願い致します

  • 「分」単位で加算(減算)したい。

    「分」単位で加算(減算)したい。 y1=2010; //西暦 m1=7; //月 d1=6; //日 h1=10; //時 n1=30; //分 s1=0; //秒 のような特定の日時に対して、 例えば、「1000分加算(或いは減算)した『日時』」 という風に、「分」単位で加算・減算したいのですが、 やり方がわかりません。 基本的な操作かもしれませんが、どなたかご教授お願いします。 なお、日数での加算・減算は対処できております。 ↓====================================- var dt = new Date( y1, m1-1, d1); //元となる日付 var addSec = 86400000; var newDate = new Date(); newDate.setTime( dt.getTime()+addSec ); myYear = newDate.getYear(); myYear4 = (myYear < 2000) ? myYear+1900 : myYear; myMonth = newDate.getMonth()+1; myDate = newDate.getDate(); ↑====================================-

専門家に質問してみよう