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

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

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

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

Q&A

2回答

634閲覧

日付の表示形式について

toll_tree

総合スコア199

PHP

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

3グッド

2クリップ

投稿2019/06/17 10:01

編集2022/01/12 10:55

ライブラリ「Carbon」を用いて日付を処理する際、表示形式に疑問があった為、そこ部分に関してお聞きしたいです。
フレームワーク(laravel)を使用していますが、今回は質問内容に関係があまりないと思った為、タグは外させて貰っています。

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Carbon\Carbon; 7 8class Reservecontroller extends Controller 9{ 10 // 11 12 13 public function getCalendarDates($year, $month) 14 { 15 $date = Carbon::parse("$year-$month-01")->locale('ja_JP'); 16 // dd($date); 17 $last = $date->copy()->startOfWeek(); 18 $count = $last->diffInDays($date->copy()->endOfMonth()->endOfWeek()) + 1; 19 // dd($count,$date); 20 for ($i = 0; $i < $count; $i++, $last->addDay()) { 21 $dates[] = $last->copy(); 22 } 23 // dd($dates); 24 return $dates; 25 } 26 27 public function reserve_date() 28 { 29 30 $current_date = new Carbon(); 31 $current_year = $current_date->year; 32 $current_month = $current_date->month; 33 $dates = $this->getCalendarDates($current_year,$current_month); 34 return view('reserve.calender',compact('dates','current_date')); 35 36 } 37 38} 39

html

1@php 2 dd($dates); 3 @endphp 4 <table class="calender_table"> 5 <thead> 6 <tr class="day"> 7 @foreach (['日', '月', '火', '水', '木', '金', '土'] as $dayOfWeek) 8 @if($loop->first) 9 <th class="sunday">{{ $dayOfWeek }}</th> 10 @elseif($loop->last) 11 <th class="saturday">{{ $dayOfWeek }}</th> 12 @else 13 <th>{{$dayOfWeek}}</th> 14 @endif 15 @endforeach 16 </tr> 17 </thead> 18 <tbody> 19 @foreach($dates as $date) 20 @if($date->dayOfWeek == 0) 21 <tr> 22 @endif 23 <td> 24 @if($date->month == $current_date->month) 25 {{$date->day}} 26 @endif 27 </td> 28 @if($date->dayOfWeek == 6) 29 </tr> 30 @endif 31 @endforeach 32 </tbody> 33 34 </table> 35

HTMlのコードはtable内の部分のみ抜粋しています。
HTMLコードの方(calendar.blade.php)でdd($dates)として、オブジェクトを確認した結果以下のように格納されていました。
イメージ説明
dd()メソッドを取り除き実際のこちらの画面を実行し表示させてみますと以下のようになります。
イメージ説明
dd()で確認した際は、日付が、06-01と日にちの部分が「01」となっているのですが、実際にtable内に表示されているのは、「1」となっています。
何故、「01」でなく「1」と表示されてしまうのでしょうか?

追記です

bladeファイルの方でvar_dump($dates)とし確認しましたが、「2019-06-07 00:00:00.000000」こちらのように日にちには確実に、「07」の形式で入っていました。他の日にちに関しても、「01」と2桁で日にちが格納されていました

aae_11, newyee👍を押しています

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

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

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

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

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

m.ts10806

2019/06/17 10:08

calenderだけでも直してください。 そんな面倒な作業ではないですし、「中学英語もできません」と恥を振り撒いてるだけですよ。 現場では容赦なく突っ返されます。
m.ts10806

2019/06/17 10:13

というか丸投げな上に何の問題も何の課題もない質問です。 興味本位の質問は非推奨ですよ。自分で確かめられることを半分も確認していません。
date

2019/06/17 10:18

mts10806さんが指摘していることを直すのなら早めの方がいいですよ。後でやると思ったらどこを直すのか分からなくなります。 こういう些細な間違いがバグになることは割とよくあります。私もあります
toll_tree

2019/06/17 10:21

修正しておきました
m.ts10806

2019/06/17 10:23

雑にやらないでください。このままファイル作るとview呼び出せません。 他にもcalenderとなっているところはたくさんあります。
m.ts10806

2019/06/17 11:05 編集

質問を修正してほしいわけではないです。手元の環境を全部直さないと同じです。動かないコードを提示して何がしたいんですか?ふざけるのはやめてくださいね。
m.ts10806

2019/06/17 11:08 編集

ちなみに同じようなやり方を実務でやると職を失います。私の昔の後輩にそれで失職した人がいます。仕事でやる気はないとしてもそれだけ大事(おおごと)です。 バグの話ではないのに明らかに動かない内容に改悪し、外面だけ直したつもりになって「修正した」と報告してるわけですから当然ですね。何度注意しても聞き入れないところまでソックリです。
m.ts10806

2019/06/17 12:03

この質問のどこが高評価なんでしょう?低評価理由は明らかだけど高評価の理由はわかりません。他の質問もそうですけどまるで打ち消すかのようについてますね。 複数アカウント所持による行為と疑われても仕方ないですよ(私への低評価も同様) とりあえず通報しておきます。
m.ts10806

2019/06/17 12:47

ライブラリの元コードとライブラリのドキュメント確認してすぐ理由が分かったんで追記しときましたんで、暇があったら見ておいてくださいね。 質問作る時間よりもだいぶ早く見つかるはずの内容でしたよ。
guest

回答2

0

生データ確認したいならvar_dump()または直接プロパティをecho 
phpデバッグの基本です。

Laravel関係なくてタグはずしたと言いつつLaravelの機能であるdd()の確認をしている意味がわからないです。

Laravel関係ないと思うのでしたら尚更、Laravel独自の機能ではなくphp本来の機能でデバッグすべきでしょう。
ちょうど直前の質問の回答で教えてもらったばかりじゃないですか?

過去にもらったアドバイスは活用しましょう。
でないとあなたが質問して解決までに要した時間だけでなくアドバイスをくれた人の時間や厚意まで無駄にしているということになります。


何故、「01」でなく「1」と表示されてしまうのでしょうか?

var_dumpまたは直接プロパティをechoと冒頭に書きました。
オブジェクト指向を学んだのであれば「プロパティ」でピンと来るはずです。

仕様。
/src/Carbon/Carbon.php

プロパティ一覧を見ると分かりますが、全てintで定義されているから。

  • @property int $year
  • @property int $yearIso
  • @property int $month
  • @property int $day
  • @property int $hour
  • @property int $minute
  • @property int $second
  • @property int $micro
  • @property int $microsecond
  • @property int $timestamp

int型に0始まりはありません。

動作確認用プログラム:

php

1<?php 2function testintParam(int $i) 3{ 4 echo $i; 5} 6echo testintParam("01"); 7 8function testintResult():int 9{ 10 return "02"; 11} 12echo testintResult();

paiza.ioでテストプログラム作っといたので、まずはそのまま実行し、Paramのほうのint、Resultのほうの:int外して確かめてみると良いです。

メソッド一覧とプロパティ一覧はもっとよく確認して機能を把握しておいたほうがいいと思います。
ライブラリでも標準関数でも何でも「何を渡して」(引数・INPUT)、「何が返ってくるか」(返り値・OUTPUT)を知っておかないと柔軟な対応は出来ませんし、効率的なロジックも考えられません。

ちなみにライブラリの公式ドキュメントのGetterの項にもちゃんとintと書いてあります。

var_dump($dt->day); // int(5)

質問前にデバッグはもちろんドキュメントの確認もしましょう。

そもそもCarbon自体がDateTimeを継承したものなのですべて読み込んだわけではないですが、実際はDatetimeのdate_parseあたりが関係してそうに思います

投稿2019/06/17 10:21

編集2019/07/24 04:09
m.ts10806

総合スコア80765

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

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

m.ts10806

2019/06/18 05:27

そのまま答え書いて低評価になる意味が分からない。 質問者自身がこの回答に低評価しているなら自身がベストアンサーに選んだ回答すら ただ私の回答をベストアンサーにしたくないためだけの身代わりにしたという失礼極まりない行為なんだが分かっているのだろうか。
guest

0

内部的には 1~31 で持っているものを、DD() で表示するとき(オブジェクトが自身を表示できる形式の文字列として返却するとき)に、一般的なフォーマットに合わせて 0 を前埋めして返しているのです。

DD() の方が加工している、のですよ。

投稿2019/06/17 10:07

tacsheaven

総合スコア13703

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

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

toll_tree

2019/06/17 10:11

ご回答ありがとうございます。 となりますと、もともとの$datesオブジェクトを取得する際の、フォーマットを変更する必要があるという理解であっていますでしょうか...?
toll_tree

2019/06/17 11:35

今、var_dumpの方でもvar_dump($dates)としましたが、やはり、「01」と日にちの欄には2桁で値が格納されていました。
m.ts10806

2019/06/17 11:53

toll_treeさん ここまで頑なにCarbonのマニュアルを読まない理由を教えてください。 マニュアル読まないのに理解なんてできるわけがないじゃないですか。 読まずに済ませられることなんてプログラミングの世界にはありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問