• 締切済み

時間の加算をlaravelまたはphpで実現したい

こんにちは。Laravel初心者マークです。 色々、自分なり考えていますが、下記の所でつまずいています。 よろしくお願いします。 //やろうとしていること  データベースに入っている時間の累計(例 9:00+10:00+11:00=30:00)をview側で表示させたい //出来た事  contoroller側でDBからselectしてsumを使って集計($starts)しview側で集計値を表示させた。(出来た)ただし今回のソースでview側は記載していない。 //やりたいことその2 view側で表示させる範囲を決め(例 2022年4月16日~2022年5月1日) 集計値を表示したいので一旦、全件取得($e_all)してview側でループ集計して合計を足したい($e_time->start_time)をループして合計値を求める感じ。  因みにstart_timeは9:00のような時間が入っている。 //試したこと  上記、日付ループだと少し大変なので$i=0~5までのループとした。 //エラー表示 $total=0; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i;  のように計算されずに文字列でそのまま吐き出している。 //補足  上記、出来た事に書いているコントローラー側で先にsumして  viewで表示した場合は、start_timeの合計値は時間で加算されている。 //DB側でなくview側で計算させる根拠  やりたいこと2で書いた通り、表示させたい範囲が変わるために(例2月、3月、4月)  範囲をview側で決めて日数でループする回数を決めたい //今回の解決したいこと  取り急ぎ、データベース側から全件取得したと仮定して  $i=0~5までのループ回分を文字ではなく時間の加算となるようにしたいです。 //Controller側で全件取得($e_all)とstart_time($starts)の合計値を取得   public function index() { $e_all = Kintai::all(); $starts = Kintai::selectRaw('SUM(start_time) as start')->groupby('date_time')->get(); return view('user.index',compact('e_all','starts')); } //view側で$e_allの中のstart_timeを取り出し加算  今回は,$startsは取っていない。 $total=0; @foreach($e_all as $e_time) @for($i=0;$i<5;$i++) {{ $e_time->start_time }} $total += $i; @endfor echo $total; //表示結果(文字で表示されている) $total=0; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i; 13:22:00 $total += $i; 以上よろしくお願い致します。

みんなの回答

回答No.1

https://www.jaga.biz/laravel/blade-php-tag/ これじゃないかな。。 <?php~?>の変わりに、@php ~ @endphp を使ってみようって、話。 ただ、どっちでもOKでもあるので、 元々のソースは、PHPではなく、View内だったってのが 原因じゃないかと。 =要するに、PHP命令じゃなくて、フロントコード だとすれば、画面にそのまま出たのも、それで正しい という結論になりますね!。 ってことで、解決したんじゃないかな?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 時間の加算(その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
  • laravel controllerに記載したい

    以前、回答いただいた内容で現在view側に書いている内容が view側に記入してあると肥大化するのでcontroller側に書きたいのですが可能でしょうか?foreachで回しているのでviewにかくしかないでしょうか?もしも可能であればcontroller側へのデータの渡し方も教えていただけるとありがたいのですが。。。よろしくお願いします。 $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月の日数を計算 $goukei = 0; 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; $sabun = (strtotime($e_time->end_time) - strtotime($e_time->start_time)) / 60; echo $sabun; $goukei += $sabun; echo $goukei; } } }

    • ベストアンサー
    • PHP
  • DB(mysql)のデータをviewに反映

    以前に投稿して回答を頂いた物に少し手を加えました。 前回は、入力した値を直接htmlファイルに表示させる仕様にしていましたが今回は一旦、DB側に登録して同じ日付のデータを全件表示させるという仕様に変えました。DB(mysql)側に登録しデータを取ってくるのは出来たのですが一件のみの取得表示になります。出来れば入力ずみの同じ日付けのデータを全件取得しデータが入っている所だけ表示したいのですが下記のソースでは、最新のデータしか表示されません。文字数の関係上、開始時間だけ取るようなソースコード記載しています。 (補足)laravelを使用 foreach($e_all as $e_time); $e_allで順に入ったデータを$e_timeに入れて $e_time->kubun $e_time->start_timeなどで順に取得させています。 (ソース一部抜粋) <table> <tr> <th>日付</th> <th>曜日</th> <th >区分</th> <th >開始</th> <th >終了</th> <th >休憩</th> <body> <?php $youbi = ['日', '月', '火', '水', '木', '金', '土']; $countdate = date('t', mktime(0, 0, 0, 10, 1, 2021)); for ($i = 0; $i < $countdate; ++$i) { $d = mktime(0, 0, 0, 10, 16 + $i, 2021); foreach($e_all as $e_time); echo '<tr>'; echo '<td class="px-4 py-3">'.date('d', $d).'</td>'; echo '<td class="px-4 py-3">'.$youbi[date("w",$d)].'</td>'; if(date('Y-m-d', $d) == $e_time->date_time){ if(!empty($e_time->start_time)){ echo '<td class="px-4 py-3">'.$e_time->kubun.'</td>'; echo '<td class="px-4 py-3">'.$e_time->start_time.'</td>'; }else{ echo '<td></td>'; } } echo '</tr>'; } ?> </body> </table> (イメージ) 16 火  17 水  DB側に同じ日付にデータがあれば全件取得表示をさせたい

    • ベストアンサー
    • PHP
  • ExcelVBA 変数について

    ExcelでD列が500以上のデータの合計をセルD21に表示するプロシージャを作成する場合、 Sub Test3_4_2() Dim i, total '合計用変数total For i = 2 To 19 If Cells(i, 4) >= 500 Then total = total + Cells(i, 4) End If Next Range("D21") = total End Sub 上記の変数Totalの使い方で、total=total+cells(i,4)の部分の意味が 分かりません。 お分かりになられる方がいらっしゃいましたら、ご教示願います。

  • プログラムについて(C言語)

    #include<stdio.h> int main() { int i,n,total; for(;;){ /* 無限ループ*/ printf("整数n?"); /* nの値の表示 */ scanf("%d",&n); /* ifとbreakを使った終了判定 */ if(n<0)break; total=1; for(i=1;i<=n;i++){ printf("i=%d ",i); total*=i; /* total←total*i(階乗の計算) */ } printf("total=%d\n",total); /* totalの値(結果)の表示 */ } printf("Thanks\n"); /* 終了メッセージの表示 */ return(0); } これは階乗を求めるプログラムなのですが、i++ではなくi--をつかって求める場合 どのように変更すればよいでしょうか? for(i=1;i<=n;i++){ あたりをいろいろ弄ってみたのですが、求めてる結果は得られませんでした

  • phpの表示領域をしていしたい!

    トップページに掲示板の書き込みを表示しているindex.phpというものを制作しました。 困っていることに掲示板が書き込みが多ければ多いほど、書き込み部分が長くなってしまいます。 対処法としてphp部分をテーブル部分かこんでみたり、CSSをいれたりしたのですが、うまく反映させません。 どうにか表示領域を指定するにはどうしたらいいでしょうか? レッツphpさんを参考に作成したものです。 【index.php】 function Main2(&$dat){ //TOPページ表示用 global $logfile,$page_def,$page,$PHP_SELF,$autolink,$re_color,$hostview; $view = file($logfile); $total = sizeof($view); $total2= $total; (isset($page)) ? $start = $page : $start = 0; $end = $start + $page_def; $st = $start + 1; $dat = "<?php\n"; $dat.="function NOTICE() { \n"; for($s = $start;$s < $end;$s++){ if(!$view[$s]) break; list($no,$now,$name,$email,$sub,$com,$url, $host,$pw) = explode("<>", $view[$s] -------略 //*************** function MakeHtml(){ //HTML生成 global $html_file; Main2($buf); //改造 $hp = @fopen ("notice.php","w"); //改造 flock($hp,2); fputs($hp, $buf); fclose($hp); } といった感じです、さんこうまでに。

    • ベストアンサー
    • PHP
  • Googlemapで始点~次のステップ間の距離を

    私は現在、GoogleMapで現在地から指定した目的地までのルートを表示させたあとに、 始点(Start_location)から次のステップ(曲がり角)の緯度経度を次々と表示させていき、 最終的に 1、現在地の緯度経度 2、曲がり角(1)の緯度経度 3、曲がり角(2)の緯度経度 4、曲がり角(3)~ というようにを表示させたいのですが、 緯度経度(X,Y)を表示させると function (){return this[a]}  で文字が表示されます。 緯度経度を表示させるためにはどういった書き方なのかを教えてください。 計算を行っているソースは以下です。 //◆総距離合計 function computeTotalDistance(result) { var total = 0; var myroute = result.routes[0];     for (i = 0; i < myroute.legs.length; i++)     {     total += myroute.legs[i].distance.value;     }     total = total / 1000. var disp_total = document.getElementById("disp_total");     disp_total.innerHTML = "total:" + total + " km"; document.getElementById("X1").innerHTML = myroute.legs[0].start_location.lat;     document.getElementById("Y1").innerHTML = myroute.legs[0].start_location.lng;     document.getElementById("X2").innerHTML = myroute.legs[1].start_location.lat;     document.getElementById("Y2").innerHTML = myroute.legs[1].start_location.lng; }

  • 現在、レンタルサーバ(コアサーバー)上でPHP5とmysqlでサイトへ

    現在、レンタルサーバ(コアサーバー)上でPHP5とmysqlでサイトへのアクセス数とサイト上の複数のリンク先へのクリック数のログを取得し、一日一回それらを一つのテーブルへ集計し、レポート表示させるプログラムを作成しました。 一日のログが少なかった頃は問題なく動いていたのですが、一日のログ数が10万を超えた辺りから集計処理がタイムアウトしてしまい、集計ができなくなってしまいました。 下記のようなイメージで集計プログラムとして動かしています。 ループ数は25,000回位です。 ループ中にはmysqlからの読み込みと書き込み処理を含んでおります。 $i = "0"; do{//サイト数だけループ $cat_i = "0"; do{//カテゴリ数だけループ $carrier = "0"; do{ $cl_i = "1"; do{ }while($cl_i < 21);    $carrier = $carrier + 1;          }while($carrier < 3); $cat_i = $cat_i + 1; }while($cat_i < $rows_cat); $i = $i + 1; }while($i < $rows_clsite); PHPを触り始めて日が浅いもので、ループを多用して重い処理になっているのはわかっております…。 コードの書き方自体もなっていないと思いますが、タイムアウトせずに動かせなく困っておりまして、アドバイスを頂ければと思っております。 PHP・ブラウザのタイムアウト対策は、 set_time_limit(0); ob_end_clean(); echo str_pad('',256); flush(); sleep(1); としており、上記で暫くは処理時間を伸ばすことができておりました。 また、phpがapachユーザー?として動く為、apachのタイムアウトに引っかかるのではと、コアサーバーのサイトに記載されていた、CGI版PHPとして動かす方法(.htaccessに記載する方法)でも試してみたのですが、結果は変わりませんでした。 しかし、本当にCGI版として動いているのか確信はありません。。 試行錯誤の上、上記のループの$iの部分を1回終了毎にブラウザに戻し、metaのRefreshで15秒開け次の処理を行わせたり、$iのループ毎に手動でPOSTにて送信し、細切れにして処理をさせているのですが、細切れにした処理だけでもタイムアウトになったりならなかったりを繰り返しております。 上記の方法では、ブラウザのタイムアウト対策をしているだけではと思いつつも、原因がどこにあるのか思い当たらない為、どう対処していいのかさえわからない状況となっております。。 単純に、apachのタイムアウトに引っかかっているのか、負荷が大きいためなんらかのサーバの制限に引っかかっているのか等、考えられる原因やその原因を一つ一つ切り捨てていけるような方法等がありましたら、ご意見お願いできればと思います。 自前のサーバの準備も進めておりますが、暫く時間がかかってしまいそうですので、現在の環境で応急処置できればと思っております。 タイムアウト時はphpなどのエラーメッセージは出ず、IEの「このページは表示できません。」というメッセージが表示されております。 乱文にて申し訳ありませんが、お知恵をお貸し頂けますと大変幸いでございます。 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • アクセスのクエリで全合計を出したのですが

    例 code name suu1 suu2 10  aaaa   12  2 20  bbbb   4  1 30  cccc   6  3 40  dddd   10  1 50  eeee   5  2 -----------------------     total  27  9 このようなテーブルがあるとすると total= 27、という 値をだしたいのです 方向としては、クロス集計クエリをつかうのでしょうか? でもクロス集計は1レコード内の 10 aaaa 12(suu1) 2(suu2) 12+2=14 のような合計はとれるのですが、全レコードの合計が いくらやっても、取れません、 よろしくおねがいします。

  • 時間の計算によってある行を取り出す

    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