質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

Q&A

解決済

3回答

191閲覧

PHPで'10:20:00'と'20:50:00'を加算して'31:10:00'を出力したい

carrot0001

総合スコア24

PHP

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

0グッド

1クリップ

投稿2019/01/10 01:46

編集2019/01/10 01:57

PHPで'10:20:00'と'20:50:00'を加算して'31:10:00'を出力したいのですがstrtotime, mktime, Dateinterval関数などを調べてもやりかたがわかりません。どなたか教えてください。

PHP

1function getSumTime($source_time, $add_time) { 2 $source_times = explode(":", $source_time); 3 $add_times = explode(":", $add_time); 4 return date("H:i:s", @mktime($source_times[0] + $add_times[0], $source_times[1] + $add_times[1], $source_times[2] + $add_times[2])); 5}

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

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

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

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

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

m.ts10806

2019/01/10 01:50

PHPのバージョンを提示してください。 あと調べただけではなく、失敗してもいいので試してみて、その試した結果を質問に記載してください(失敗することは何も恥ずかしいことではないし、解決のヒントになります)
carrot0001

2019/01/10 01:50

PHP5.3です。 自分でやったのは以下です。 function getSumTime($source_time, $add_time) { $source_times = explode(":", $source_time); $add_times = explode(":", $add_time); return date("H:i:s", @mktime($source_times[0] + $add_times[0], $source_times[1] + $add_times[1], $source_times[2] + $add_times[2])); }
m.ts10806

2019/01/10 01:52

質問は編集できるので質問に追記してください。 コードはマークダウンのcode機能を利用してください(わからなければコード部分を選択して<code>ボタンを押してください)
m.ts10806

2019/01/10 01:52

PHP5.3をなぜ今使っているのでしょうか。保守案件か何かなのでしょうか。。
carrot0001

2019/01/10 01:56

PHP5.3はOSにそれしか入らないものを使っているからです。
m.ts10806

2019/01/10 01:57

ちょっと意味が分からないですね。OSと導入可能なPHPのバージョンというのは関係ないはずですし(Webサーバーならないことはないでしょうけど) とりあえずその1つ前のコメント通り質問を編集してください。
m.ts10806

2019/01/10 02:01

その記事からリンクが貼られている「Yum で任意のバージョンの PHP をインストールする」を試したら良いのでは。
carrot0001

2019/01/10 02:02

ところで5.3では質問の対応はできないのですか?
carrot0001

2019/01/10 02:02

リンクの内容をきちんと読んでください。
m.ts10806

2019/01/10 02:05

リンク内容をきちんと読んでください はお返しします。 探せば「CentOS6/CentOS7にPHP5.6/PHP7をyumでインストール」という記事もあるくらいです。 https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e 相当古いバージョンであったらできるかどうか以前にそちらの方が気になりますね。
carrot0001

2019/01/10 02:06

横道にそれないで回答してください
carrot0001

2019/01/10 02:06

その方法はためしましたがPHP7は入りませんでした
m.ts10806

2019/01/10 02:08

PHP5.3環境とか用意するのがかなり面倒ですしね。PHP5.6ですらサポート切れてるというご時勢です。 「5.3でできるかどうか知りませんが」程度の回答しかできません。それでもよければ。
carrot0001

2019/01/10 02:09

それでいいのでお願いします
guest

回答3

0

ベストアンサー決まってしまいましたが、書きかけたので投稿しておきます。
参考まで。

PHP

1$t1 = strtotime("1970/1/1 ". "10:20:00"); 2$t2 = strtotime("1970/1/1 ". "20:50:00"); 3$t3 = $t1 + $t2; 4$h = floor($t3 / 60 / 60); 5$m = floor(($t3 - $h * 60 * 60) / 60); 6$s = $t3 % 60; 7printf("%d:%02d:%02d\n", $h, $m, $s);

投稿2019/01/10 02:49

ttyp03

総合スコア16998

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

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

退会済みユーザー

退会済みユーザー

2019/01/10 03:17

仮にでも日付をつけてタイムスタンプ化してから演算するこのやり方のほうが個人的には好き。
ttyp03

2019/01/10 04:05

賛同、ありがとうございます。
guest

0

PHP

1function getSumTime($source_time, $add_time) { 2 define('HOUR_LABEL', 0); 3 define('MIN_LABEL', 1); 4 define('SEC_LABEL', 2); 5 6 $source_times = explode(":", $source_time); 7 $add_times = explode(":", $add_time); 8 9 $sec = carryTime($source_times[SEC_LABEL] + $add_times[SEC_LABEL]); 10 $min = carryTime($source_times[MIN_LABEL] + $add_times[MIN_LABEL] + $sec['carry']); 11 12 return ($source_times[HOUR_LABEL] + $add_times[HOUR_LABEL]) + $min['carry'] .':'. $min['base'] .':'. $sec['base']; 13} 14 15function carryTime($time) { 16 $ret = ['base' => $time, 'carry' => 0]; 17 if($time > 60) { 18 $ret['carry'] = floor($time/60); //繰り上がり 19 $ret['base'] = $time%60; //繰り上がり後の余り 20 } 21 return $ret; 22} 23 24$source = '10:20:00'; 25$add = '20:50:00'; 26 27echo getSumTime($source, $add);

投稿2019/01/10 02:28

kunai

総合スコア5405

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

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

0

ベストアンサー

mktimeを使おう(日付というオブジェクトとして扱おう)という考慮はすばらしいですが、この問題は31時を求めている時点で時刻表現として妥当ではないので、成功していないのではないかと思います。
(日付系のオブジェクトは24時間を越えたときに妥当な日付にまるめるときは至極便利なのですが、じゃあ24時間を越えたのか、月をまたいだのか、みたいなことを情報として返してくれないのが、phpに限らず一般的だと思います。特にaddやmodifyしているならともかく、今回のように最初から和と時刻として渡しているとつらい)

日付オブジェクトでやるとすれば、'10:20:00'を一旦オブジェクト化し、これと結果の日付で日付がずれていたらHの部分を24足したものにするという加工が、getSumTimeとは別に必要でしょう。

回答例としては、'32:148:120'がないという制約があるか不明なので↓のように手続的に書き下しました。

php

1<?php 2$a1 = '10:20:00'; 3$a2 = '20:50:00'; 4$b1 = explode(":", $a1); 5$b2 = explode(":", $a2); 6$q2 = floor(($b1[2] + $b2[2]) / 60); 7$b1[2] = ($b1[2] + $b2[2]) % 60; 8$q1 = floor(($b1[1] + $b2[1] + $q2) / 60); 9$b1[1] = ($b1[1] + $b2[1] + $q2) % 60; 10$b1[0] += $b2[0] + $q1; 11echo implode(":", $b1);

投稿2019/01/10 02:14

papinianus

総合スコア12705

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

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

carrot0001

2019/01/10 02:17

大変ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問