PHPのfunction内での時間計算方法について

このQ&Aのポイント
  • function内での時間計算方法が上手く動作しない問題について相談いただきました。具体的には、入力した時間と分を計算し、結果を表示する処理でうまくいかないとのことです。
  • 現在の実装では、入力した値を取得して計算を行い、連結した結果を表示する仕組みになっています。しかし、特定の箇所でエラーが発生しており、時間と分を別々に表示させることができません。
  • 解決策としては、表示させたい時間と分を別々の変数に格納し、最後に連結する方法が考えられます。ただし、具体的なエラーメッセージやエラーが発生している箇所の情報がないため、詳細なアドバイスはできません。
回答を見る
  • ベストアンサー

phpのfuction内での計算

function内での時間計算方法がいまいちうまくいきません。 調べたりして書いたのですがfunctionが呼ばれず処理が働きません 入力した場所からフォーカスが外れたとき呼ぶようにしています ※ onblur = func() <test.php> function func(){ $s_time = parseFloat(document.TEST.start_time.value); //入力値Aの時間 $s_minute = parseFloat(document.TEST.start_minute.value); //入力値Aの分 $e_time = parseFloat(document.TEST.end_time.value); //入力値Bの時間 $e_minute = parseFloat(document.TEST.end_minute.value); //入力値Bの分 //共通変数 $base_start = 540; $base_end = 1080; $s_t = $s_time * 60; $s_data = $s_t + $s_minute; //分に変換 $e_t = $e_time * 60; $e_data = $e_t + $e_minute; //分に変換 --------------------------ここから計算処理 $kekka_start = $s_data - $base_start; $kekka_end = $base_end - $e_data; $kekka_data = $kekka_start + $kekka_end; $kekka_min = $kekka_data / 60; //時間に変換 $kekka_time = explode(".",$kekka_min); //小数点の切り捨て☆ $kekka_times = $kekka_data - ($kekka_time[0] * 60); //--分のデータ作成 $CS = ($kekka_time.":".$chis_times); //表示データの連結☆ document.TEST.kekka.value = CS; } ☆の部分がうまくいきません。コメントアウトしてexplode前の変数を表示するならばできるのですが 時間の合計を出したいので時間と分を別々に出して連結で表示させたいです。 かなり詰まっています。どうかよろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数9

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

  • ベストアンサー
  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

>入力した場所からフォーカスが外れたとき呼ぶようにしています onblurで呼び出せるのはJavaScriptの関数だけです。phpの関数はブラウザに返しているソースには含まれていませんので、JavaScriptから利用することは出来ません。サーバサイドとクライアントサイドの違いを理解してください。 parseFloatとかあるのでJavaScriptの関数かと思ったのですが、文字列連結などはphpの演算子が混じっているしexplodeはあるし・・・。JavaScriptならJavaScriptで完結させてください。

k-karasu
質問者

お礼

回答、ありがとうございました。 JavaScriptで文字の切り分け、連結を実装したところ無事うまく動きました。 まだまだ勉強不足でした。ありがとうございました。

k-karasu
質問者

補足

回答、誠にありがとうございます。 PHPは初心者で素人なのでJavaScriptのとPHPが混ざっていました・・・ onblurで呼び出せるのはJavaScriptのみでexplodeや 文字連結はPHP記述なのでおかしいということですね。 それらの処理をするならPHP記述ではなくJavaScriptで記述するということでしょうか。

その他の回答 (2)

noname#247307
noname#247307
回答No.3

PHPだと思って読んでしまいました。これ、JavaScriptなんですね。紛らわしい書き方はしないほうがいいですよ。 $kekka_time = explode(".",$kekka_min);  ↓ $kekka_time = ("" + $kekka_min).split("."); としてください。

k-karasu
質問者

お礼

回答ありがとうございます。 お教えいただいた記述ですが私の書き方が悪いか、記述場所が間違っているのかうまく動きませんでした。 Math.floorを使用して動作確認できました。 ありがとうございます。

k-karasu
質問者

補足

回答ありがとうございます。 書き方がわかりにくかったようですみませんでした。 ごちゃ混ぜに書いてしまいました。

回答No.2

PHPをクライアントサイドのロジックのように書いてますが、なぜでしょうか?

k-karasu
質問者

お礼

回答ありがとうございます。 PHPの知識が浅く混ぜ混ぜで書いてしまっていました。 もっと記述を学んでいきます。 ありがとうございました。

関連するQ&A

  • phpの入力値の渡し方

    ループでテキストボックス、セレクトボックスを作成しそれぞれのコントロールに入力した値を別phpファイルに渡すことを考えています。 ループではなく一個一個テキストボックスを作れば個々のname属性をpostすればいいと思うのですがループの場合、それぞれの入力値をどのように渡せばいいかわかりません。 <test.php> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <link rel="stylesheet" href="style.css" type="text/css" /> <meta name="viewport" content="width=device-width"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>勤怠データ入力</title> </head> <script type="text/javascript"> function myEnter(){ myRet = confirm("入力画面を閉じてよろしいですか?"); } </script> <body> <div id="name"> <table> <tr style="text-align:center; background-color:#DDEBF7;"> </tr> <form name = "Data" action="foo.php" method="POST"> <tr style="text-align:center;"> </tr> </table> </div> <div id="button"> <input type="submit" name ="touroku" value="登録更新" style="margin-right:30px;" /> <input type="submit" value="戻る" onclick="myEnter()" /> </div> <div id="calendar"> <table style="text-align:center;"> <tr style="text-align:center; background-color:#DDEBF7;"> <td style="width:20px;">日</td> <td>開始時間</td> <td>終了時間</td> <td>入力1</td> <td>入力2</td> <td>入力3</td> </tr> <tr><!--1日--> <?php $day = 1; while ($day < 32){ ?> <td><input type="text" readonly value="<?php echo $day ?>" style="width:20px;"</td> <td><select name="start_time" > <option value="0" > 0</option> <option value="1" > 1</option> </select> : <select name="start_minute"> <option value="00" >00</option> <option value="30" >30</option> </select> </td> <td><select name="end_time" > <option value="0" >0</option> <option value="1" >1</option> </select> :<select name="end_minute"> <option value="00" >00</option> <option value="30" >30</option> </select> </td> <td><input type="text" name = "nyuryoku1" value="" style=width:150px></td> <td><input type="text" name = "nyuryoku2" value="" style=width:150px></td> <td><input type="text" name = "nyuryoku3" value="" style=width:150px></td> </td> </tr> <?php $day++; } ?> </form> </body> </html> <foo.php> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <?php $s_hour = ($_POST['start_time']); $s_minutes = ($_POST['start_minute']); $e_hour = ($_POST['end_time']); $e_minutes = ($_POST['end_minute']); $data1 = ($_POST['nyuryoku1']); $data2 = ($_POST['nyuryoku2']); $data3 = ($_POST['nyuryoku3']); $s_time = ($s_hour.$s_minutes); $e_time = ($e_hour.$e_minutes); echo '開始時間'; echo $s_time; echo '終了時間'; echo $e_time; echo '入力1'; echo $data1; echo '入力2'; echo $data2; echo '入力3'; echo $data3; ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>無題ドキュメント</title> </head> <body> テスト実行 </body> </html>

    • ベストアンサー
    • PHP
  • JavaScriptの結果値を渡す

    JavaScriptの結果値を渡す方法について悩んでします フォーカス遷移時、関数を呼び出してフォームの入力値から計算してテキストボックスに結果値を 代入するという処理を考えています <script type="text/javascript"> //--関数 function go(){ $get = 1; $a_data = parseFloat(document.Data.start_time.value); $b_data = parseFloat(document.Data.start_time.value); $c_data = parseFloat(document.Data.start_time.value); $d_data = parseFloat(document.Data.start_time.value); document.Data.Answer.value = $a_data - $get; document.Data.Answer.value = $b_data - $get; document.Data.Answer.value = $c_data - $get; document.Data.Answer.value = $d_data - $get; } </script> <?php $day = 1; while ($day < 5){ ?> <form name = "Data"> <tr> <td><select name="<?php echo $day ?>[start_time]" onblur = "go()"> <option value="1" >1</option> <option value="2" >2</option> <option value="3" >3</option> <option value="4" >4</option> </select> </td> <td><input type="text" name = "<?php echo $day ?>[Answer]" readonly value="" style=width:40px></td> </tr> </form> <?php $day++; } ?> 関数内で結果を渡そうとしているdocument.Data.Answer.valueの部分がうまく指定でいていないため valueに代入できていないのでは?と思っています。 よろしくお願いします。

  • 時間の加算(その2)php

    DBからある範囲の日付けの時間だけを取ってきて取ってきた時間の差分の累計を計算したいです。 例えば、4月16日から5月15日までのスタート時間とエンド時間を所得 させてエンド引くスタート、日々の差分を累計するようなことが実現したいです。 下記のように書いてデータだけは引っ張ってこれるようになったのですが加算方法が分かりません。ご教授いただけませんでしょうか? (ソース?php $ym = date("2022-04-22"); $tm = date("n",strtotime($ym));//月 $ty = date("Y",strtotime($ym));//年 $countdate=date('t',mktime(0,0,0,$tm,1,$ty));//4月の日数を計算 for ($i = 0; $i < $countdate; ++$i) { $d = mktime(0, 0, 0, $tm, 16 + $i, $ty); //日付ごとの配列のキー $dd = date('Y-m-d', $d); foreach($e_all as $e_time){ if (in_array($dd, (array)$e_time->date_time)) { echo $e_time->start_time;   echo $e_time->end_time; }} } ?> 因みにechoで表示されたデータは 09:00:00 20:00:00 08:00:00 18:00:00 09:00:00 19:10:00 となっていて 順番に登録してある4/20 のスタート時間、エンド時間 4/21のスタート時間、エンド時間4/22のスタート時間、エンド時間 の並びで取れています。よろしくおねがいします

    • ベストアンサー
    • PHP
  • 時間の計算によってある行を取り出す

    MySQLバージョン4.1.16を使っています。 id start_time1 end_time1 start_time2 end_time2 という時刻が入っている項目があったときに、(時刻はdate("y/m/d H:i:s")という形式です) (end_time1 - start_time1)の値と(end_time2 - start_time2)の値の合計が 例えば5時間30分以上だった場合にのみ、その行を取り出すというSQL文は どのように書けば良いのでしょうか? 合計が24時間以上だった場合も考慮に入れないといけないので難しそうな気がしますが、、

    • ベストアンサー
    • MySQL
  • 計算結果の表示方法について

    お世話になります。 Java Scriptの記述方法で教えてください。 下記のフォームを作りました。 テキストボックスに目標タイムを4時間30分であれば4.5と入力することで必要な時速とキロ当たりのペースを出すようにしています。 2行に渡り、キロ当たりのペースを分と秒で出ていますがが、これを○分○秒と1行に表示させたいのです。 どなたかお知恵をお願いします。 <html> <head> <script type="text/javascript"> function calc(frm) { var result = Math.round(42.195 / (parseFloat(frm.elements["a"].value))*10) / 10; document.getElementById('result_1').getElementsByTagName('span')[0].innerHTML = result; result = Math.floor(parseFloat(frm.elements["a"].value) / 42.195 * 60); document.getElementById('result_2').getElementsByTagName('span')[0].innerHTML = result; result = Math.round(parseFloat(frm.elements["a"].value) / 42.195 * 60*60)%60; document.getElementById('result_3').getElementsByTagName('span')[0].innerHTML = result; result = Math.round(1 / 42.195 * 5 * parseFloat(frm.elements["a"].value) *100) /100; document.getElementById('result_4').getElementsByTagName('span')[0].innerHTML = result; } </script> </head> <body> <form> <input type="text" name="a"> <input type="button" value="計算" onClick="calc(this.form)"><br> 計算結果<br> <div id="result_1">時速      <span></span>km/h</div> <div id="result_2">キロペース  <span></span>分</div><div id="result_3">       <span></span>秒</div> <div id="result_4">5km       <span></span>時間</div> </form> </body>

  • php プルダウンメニュー 時刻チェック

    <?php print '<select name="start_time">' . "\n"; $start = mktime(09,00); $end = mktime(19,00); for ($i = $start; $i <= $end; $i+=30*60) { $time=date("H:i",$i); print "<option value=\"{$time}\">{$time}</option>\n"; } print '</select>~' . "\n"; print '<select name="end_time">' . "\n"; $start = mktime(11,00); $end = mktime(21,00); for ($i = $start; $i <= $end; $i+=30*60) { $time=date("H:i",$i); print "<option value=\"{$time}\">{$time}</option>\n"; } print '</select>' . "\n"; ?> となっている場合選択される場合 14:00~16:00と選んでいただければよいのですが、この記述だと14:00~10:00と選ぶことが可能になってしまいます。 ここでご質問なのですが、start_timeのセレクトを選んだ場合、自動でend_timeをstart_timeで選んだ時刻の2時間後から選択できる記述はないでしょうか? javascriptを使わないといけないのでしょうか? もしphpでございましたらご教授お願いします。

    • 締切済み
    • PHP
  • if文で質問です。

     初めまして!初めてこの掲示板にきました。 今後ともよろしくお願いします。 今、研修で会議室の予約システムを作っています。 お昼休み(12~13時)を空欄にしたいのですが、 if文が解らなくて困っています。 本も見てみたのですが、載っていません。 どなたか教えてください。 書いてみた方法では、エラーになる上、欲しい物とは程遠い物が出来てしまいます。 s_timeは選択された開始時間、e_timeは選択された終了時間です。 このように作っています。 function gomon(){ if((document.form1.e_time.value - document.form1.s_time.value) > 5){ alert("利用時間は5時間までです。"); } if((document.form1.e_time.value - document.form1.s_time.value) < 6){ sanmon(); } }

  • alert表示で計算結果がうまく表示しません

    alert表示で計算結果がうまく作動しません。 全問正解しても『0』と表示されてしまいます。 for文がうまくいっていないのだと思いますが どう解決していいのか、まったく解りません。 おわかりになる方がいらっしゃいましたら教えて下さい。 <script language="JavaScript"> <!-- function func() { $A = new Array(6); $A[1] = "n"; $A[2] = "n"; $A[3] = "n"; $A[4] = "n"; $A[5] = "n"; var $q_no; var $i_end; var $i = parseFloat($i); var $ans= parseFloat("0"); $i_end = parseFloat($q_no); $i_end = $i_end + 1; for($i; $i < $i_end; $i++){ if ($A[$i] == document.Frm_Q.Q[$i].value){ $ans= $ans + 10; } } alert($ans); } // --> </script> <form name="Frm_Q"> <input type="radio" name="Q[1]" value="Y">はい<input type="radio" name="Q[1]" value="n">いいえ<br>###Q5まで続く### <input type="button" value=" 採 点 " onClick="func()"> <input type="reset" value="リセット"> </form>

  • phpのセレクトボックスの配列について

    お世話になっています。 PHPのセレクトボックスの設定でわからないことがあります。 一度質問させていただいたのですが連なる点でわからないとこが出たので質問させていただきます。 不明点は3つあります。 1.セレクトボックスの値を配列で設定する 配列で設定しておけばその配列を複数使用しても参照配列さえメンテすればいいと思うので配列を想定しています 2.配列で設定したときのセレクトボックスの初期値について セレクトボックスの値をベタ書きしている場合は単にselectedすればいいと思うのですが配列の場合厳密なselectedの方法が不明です 3.配列での選択値をPOSTした場合 3つめが最もはまっています以下のソースだと選択値が配列の値が表示されますし、初期値も表示できていますが POSTした値がまともに渡されていません POST先でDB処理を想定しているのですがdate型だとすべて[00:00:00]になってしまいます。 配列を使用しないパターンだと1.2.3全てうまくいくのですがメンテナンスがしづらいので配列で指定したいです 何か、良い方法があればご教授ください //配列の値 $time = array( "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23" ); $minute = array ("00", "15", "30", "45"); for( $a=0; $a < count( $time_array ); $a++){ $selectedStartTime =($time_array[$a] == $start_time[$j])?" selected":""; $startTimeSelectBox .= "\t<option value=\"{$time_array[$a]}\"{$selectedStartTime}>{$time_array[$a]}</option>\n"; } for($a=0; $a < count($minute_array); $a++){ $selectedStartMinute =($start_minute[$j] == $minute_array[$a])?" selected":""; $startMinuteSelectBox .="\<option value=\"{$minute_array[$a]} \"{$selectedStartMinute}>{$minute_array[$a]}</option>\n"; } <td><select name="start_time<?php echo $day ?>" onblur = "func()"> <?php echo $startTimeSelectBox ?> </select> : <select name="start_minute<?php echo $day ?>" onblur = "func()"> <?php echo $startMinuteSelectBox ?> </select> </td> かなり詰まっています。よろしくお願いします。

    • ベストアンサー
    • PHP
  • innerTextの内容を<a>タグに表示させたい

    開始と終了のテキストボックスに日付8桁(20120422)と入力した際 リンクにパラメータを追加したいのですが上手くいきません。 何もないところに表示することはできましたが<a>タグ内に表示が上手くいきません。 「ここに追加したい」のところに<span id="preview"></span>としても そのままこの文字列が出てしまいます。 どなたかご教授お願いします。 よろしくお願いし致します。 <script type="text/javascript"> function showPreview() { var start = document.getElementById('start').value ; var end = document.getElementById('end').value ; s_leng = start.length; e_leng = end.length; if(s_leng == 8 && e_leng == 8){ document.getElementById('preview').innerText = "start=" + start +"&end=" + end ; (innerHtmlでも上手くいかない) } } </script> ------------------------------------------------------------------------------------ <form> <input type="text" id="start" onkeyup="showPreview()">開始 <input type="text" id="end" onkeyup="showPreview()">終了 </form> <? $sql = "SELECT name FROM Catalog"; $rtns = pg_query($con, $sql); while($rtn = pg_fetch_array($rtns)) { ?> <a href="link.php?ここに追加したい"><?=$name?></a> <? } ?> <span id="preview"></span> →ここに表示することは可能

専門家に質問してみよう