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

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

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

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

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

Q&A

解決済

2回答

775閲覧

時刻比較の際の挙動について

toll_tree

総合スコア199

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

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

Laravel 5

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

2グッド

0クリップ

投稿2019/06/23 14:32

編集2019/06/23 16:57

carbonでの時刻を比較する際に関して、お聞きしたい点がございます。

for($i =0; $i < 15; $i++){ // dd($time); // var_dump($time); if(!$time->between(Carbon::createFromTime(12,00,0),Carbon::createFromTime(13,30,0))){ $reserved_time[] = $time; var_dump($reserved_time); // echo __LINE__ . PHP_EOL; // dd($reserved_time); } // echo __LINE__; // dd($reserved_time); $time = $time->addMinutes(30); // echo $i; // if() } dd(); dd($reserved_time);

if文内の「var_dump($reserved_time);」こちらの結果は、最終的に以下の画像のようになりました。
イメージ説明
if文に入る前の、$timeの中身を「var_dump($time);」こちらで確認してみましたが、10:00~17:00までのカーボンオブジェクトが存在していました。
更に、for文を抜けた後の「dd($reserved_time);」こちらの結果は以下の画像になりますが、全て同じ17:30分のCarbonインスタンスが格納されてしまっています。
イメージ説明
何故、$reserved_timeには、17:30のみのインスタンスが格納されてしまっているのでしょうか?

aae_11, newyee👍を押しています

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

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

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

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

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

guest

回答2

0

全て同じ17:30分のCarbonインスタンスが格納されてしまっています。

新しいインスタンスを作成するでもなく同じインスタンスを配列に入れているから。

投稿2019/06/23 17:05

kei344

総合スコア69366

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

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

0

ベストアンサー

配列の中をみると全てのcarbonインスタンスは同じものだと思われます。
もしも日付と時刻を入れればいいのであれば、

php

1$reserved_time[] = $time->format('Y/m/d H:i:s');

に変更すれば、インスタンスではなく、文字列が格納されるため、それぞれの日時が入ると思われます。

追記
例)

php

1 $start = Carbon::createFromTime(10); 2 $reserved_time = []; 3 for($i =0; $i < 15; $i++){ 4 $time = Carbon::parse($start); 5 if(!$time->between(Carbon::createFromTime(12,00,0),Carbon::createFromTime(13,30,0))){ 6 $reserved_time[] = $time; 7 } 8 9 $time = $start->addMinutes(30); 10 }

投稿2019/06/23 15:52

編集2019/06/23 17:09
fumito_94

総合スコア679

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

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

toll_tree

2019/06/23 17:00

ご回答ありがとうございます。 文字列にしてみましたら、$reserved_time正確に日時が格納されました。 しかし、どうしてもCarbonインスタンスとして扱いたい為、インスタンスとして、取得したいんですよね...
toll_tree

2019/06/23 17:01

ご回答頂きました「配列の中をみると全てのcarbonインスタンスは同じものだと思われます。」こちらの部分なのですが、何故このような現象が起きてしまっていると思われますか?
fumito_94

2019/06/23 17:07

こちら同じインスタンスを配列に入れているため、要は変数が見てる先が同じになってしまっているということです。 なので、できる方法としてはループの中で新しくインスタンスを作るというやり方ができると思います。
hentaiman

2019/06/23 17:13

https://teratail.com/questions/191294 以前のご自身の質問内容です。その時の内容よりももっと基本的な部分ではありますが、newしたobjectに関する話には変わりないので確認してみてはいかがでしょうか。
toll_tree

2019/06/23 18:00

なんとなくつかめた気がします。 $time = $time->addMinutes(30);ここの部分で、30分後の時間を持った別のインスタンスが作成されると思っていたのですが、結局$timeに代入していたので、$reserved_timeは最終的にすべて17:30の時間帯を所持することになったのですね。
m.ts10806

2019/06/23 21:31 編集

いつも「思っていた」ばかりですよ。これまでのことも今回のことも何も掴めていません。掴めているなら今回も質問する必要はないはずです。 組んだようにしか動きません。忘れてませんか?誰も思ったようには動かせないんですよ。 マニュアル読んで理解につとめないからいつまでも「思っていた」から抜け出せないんです。 Carbonの問題でもなくPHPの基礎の基礎の問題です。ライブラリやフレームワークを使う段階には程遠いですよ。私に限らず他の回答者にも何人にも指摘されています。逃げてばかりにしか見えません。 どんなに逃げても書いたようにしか動きません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問