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

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

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

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

Laravel 5

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

Q&A

解決済

4回答

10004閲覧

Laravel5.5 文字列を日付に変更する

notimo

総合スコア9

PHP

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

Laravel 5

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

0グッド

1クリップ

投稿2018/06/13 06:41

前提・実現したいこと

プログラミング初心者です。
商品の発注履歴をDBへ保存しているのを一覧画面で表示しようと思っています。

orders テーブル id [INT(10)] product_name [VARCHAR(191)] ordering_month [VARCHAR(10)] ・ ・...省略... ・

ordering_monthカラムの内容は2017年の10月に発注したとすると
201710となるようにしています。

この201710を一覧画面では 2017年10月と表示したいのですが
Laravelでどのような方法があるか、助言をいただけないでしょうか。

試したこと

取得した201710mb_substrを使用し、表示自体はできました。
少し回りくどい感じがしたのでもう少し簡単な方法があればお教えいただければと思います。

PHP

1OrdersController.php 2 3public function __construct() 4 { 5 $this->middleware('auth'); 6 $this->orders = new Orders(); 7 } 8 9public function index() 10 { 11 $orders = $this->orders->all(); 12 foreach ($orders as $order){ 13 //$order->ordering_month = '201710' 14 $year = mb_substr($order->ordering_month, 0, 4); 15 $month = mb_substr($order->ordering_month, 4, 6); 16 //2017年10月 と表示 17 dump($year.'年'.$month.'月'); 18 19 } 20 return view('orders.list', ['orders' => $orders]); 21 }

よろしくお願いします。

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

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

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

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

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

guest

回答4

0

今回は簡単な文字列操作で十分かと思いますが、
今後、日付の加減算が必要な場面もあるかと思います。
Laravelにはそんな場面を想定し、CarbonというPHP標準のDateTimeを拡張した日付処理のライブラリが最初から組み込まれています。

php

1use Carbon\Carbon; 2 3dump(Carbon::createFromFormat('Ym', '201512')->format('Y年m月'));

CarbonはDateTimeがベースとなっているので、DateTimeでも一緒です。

php

1use DateTime; 2 3dump(DateTime::createFromFormat('Ym', '201512')->format('Y年m月'));

bladeでCarbonを使う場合は・・・パッケージ名が冗長です。

php

1{{\Carbon\Carbon::createFromFormat('Ym', '201512')->format('Y年m月')}}

DateTimeのほうが若干お気軽。

php

1{{DateTime::createFromFormat('Ym', '201512')->format('Y年m月')}}

すでにbladeで扱う値が日付型の場合は簡単です。
ordering_monthをDateTime型で格納するようにモデル側で工夫し(この時CarbonやDateTimeを使って、特定カラムは自動でDateTime型で格納するような仕組みを作ったり、モデルにDateTimeに変換して返すgetterを仕込む)、bladeでformat()を使う。これが理想かと思います。

php

1{{$entity->ordering_month->format('Y年m月')}}

投稿2018/06/13 07:50

編集2018/06/13 07:59
so87

総合スコア764

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

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

notimo

2018/06/13 07:57

ありがとうございます。 {{\Carbon\Carbon::createFromFormat('Ym', '201512')->format('Y年m月')}} 上記をviewで記載し、期待する動作をしました。 申し訳ございません、ご回答して頂けたタイミングで他の型にベストアンサーをつけさせていただいてました。 モデル側で日付型に変更するようにしてみます。 ありがとうございました。
guest

0

ベストアンサー

そのままで良いと思いますよ。
正規表現使ったり、日付関連の関数使ったりすると遅くなるだけなので。

投稿2018/06/13 06:55

yhg

総合スコア2161

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

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

notimo

2018/06/13 07:50

ご回答ありがとうございます。 そうですか!それでしたらこのまま行こうと思います。 不安が多かったのでそうおっしゃって頂けて安心しました。 ありがとうございました
guest

0

bladeテンプレートのformatを使ってはいかがでしょうか?
こちらの記事でやり方が書いてあります

投稿2018/06/13 07:08

kenny_sayama

総合スコア1036

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

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

notimo

2018/06/13 07:49

ありがとうございます!そちらでは試したみたのですが、 もともとの$order->ordering_monthが文字列なのでエラー画面が出ます。 Call to a member function format() on string
guest

0

「Laravelで」のやり方ではないですが。

php

1date("Y年m月",strtotime($order->ordering_month."01"));

01など必ず存在する日付を文字列として足してYmdの形式にして、あとはdate()で。

投稿2018/06/13 07:01

m.ts10806

総合スコア80850

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

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

notimo

2018/06/13 07:48

ありがとうございます。試しに行ってみたのですが 1970年01月となってしまいました、 もう少し調べてみます
m.ts10806

2018/06/13 08:12

201710で直で入れて確かめたんですが、値が変わってるんですかね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問