忍者ブログ
プログラマ、ララ・ベル子さんのゆるふわ奮闘記。

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

Carbon使っていて3月にバグがたくさん出る問題

Carbonてすごく便利ですよねー。
Carbonが何なのかはこちらの記事を読んでもらうとして、引用させてもらうと、
CarbonとはPHPのDateTimeクラスをオーバーラップした日付操作ライブラリです。
だそうです。

Laravel使いのみんなは、すでに使ってると思います。

JavaScriptだとMoment.jsは非常に使いやすいですね。

ということで今日は時間がないので本題です。
Carbonは便利なのですが、いろいろ落とし穴があって、気をつけて書かないと3月29日とか7月とかになるといろいろバグが出てきます。
ひとまず思い出したものをまとめておきます。
また思い出したら追記します。

diffInMonthなどの差分系メソッドはUTCに変換されてから計算されるため1日だと予想した結果にならない場合がある

10日とか安全な日にしてからdiffする。

Carbon::now()->subMonth()みたいにすると3/29に2月が取得できない

Carbon::now()->subMonthNoOverflow()にする。
加えるときはCarbon::now()->addMonthNoOverflow()にする。
基本、Carbon::now()からaddMonth()とsubMonth()は使ってはいけない。

※ 2017/5/23加筆:addMonthNoOverflowなどのNoOverflow系のメソッドはインスタンスをコピーして別のインスタンスを返すため、$date->subMonthNoOverflow()などのように書いた場合は必ず戻り値を元のインスタンスに代入してやる必要がある。

$date = $date->subMonthNoOverflow();

こんな感じ。

createFromFormat('Y-m', '2017-02')を指定して日付を作った場合に、現在のシステム日付が29~31だと2月が3月になってしまう

createFromFormatではなくCarbon::parse('2017-02')を使用する。


なんか他にも時間の何かがあったような気がしますが、
とりあえず以上です。

拍手[3回]

PR

Ajaxでpostした時のデバッグ方法

こんにちは。
最近、すっごく暑いですね。ちょっと凹み気味のベル子です。

今月のベル子のネイルはラピュタをイメージしたラピュタネイルです。
子供の頃に大好きで何度も見たアニメです。
ふと手を止めて、爪先を眺めると何だか癒されます。バルス.....

あ、このままいくと前置きがいつもどおり長くなるのでサクッと本題に入ります。

Ajaxでpostした際にphp側でエラー 500 (Internal Server Error) が出てるときのデバッグ方法をまとめます。
今まで、わざわざjsを外してsubmitしてとか訳のわからないことをやっていて、本当につらかったです。うすうす、デブツールのヘッダーを見るところを見ればいいのかもしれないと思って、ヘッダーのところは何回か見てみたのですが、結局よく分からないままだったんですね。

結論から言うとResponseタブを見ればよかったんです。
私って、いつも少しだけ惜しい。
誰か褒めてください。ベル子は褒めたら伸びるタイプです。


【Ajaxのpostがうまくいかない時にエラー内容を確認する手順 Chrome編】

★ステップ1

★ステップ2
 
★ステップ3


★ステップ4



実は、このエラーのレスポンスですが、なんと、なななんとlaravel-debuggerで確認できます(笑)
先にそっちを見ろよって話です。



せっかくのデバッグツールなのに見ていないという悲しい事実。
なんかjsのデバッグと一緒にやってるとコンソールが2倍になってしまって、うざったいので速攻で畳んでしまうんです。

未だにphpの効率的なデバッグ方法があまり分かってなくて、いつも「おい、ちょっと待て、そこでdumpしろ」って師匠に言われてしまうんですよねぇ、、、、。

ブレークポイントとか設定できるデバッガがエディタについてればいいのに。

ふぅ。

なんか、暑いから会社のカフェスペースにプールを置いてくれないかなぁとか思うんですけど、私が水浴びしてても誰も突っ込んでくれないというシュールな絵になりそうなので、ガマンしようと思います。
明日はアイスでも食べながら仕事したいな。
一人じゃ寂しいから誰か一緒に食べてください。


ではでは、ばいびー。

拍手[3回]