Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
date()とかtime()の関数よりDateTimeクラス使った方が良さそう的な話
Search
たきゃはし
June 29, 2019
17
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
date()とかtime()の関数よりDateTimeクラス使った方が良さそう的な話
たきゃはし
June 29, 2019
More Decks by たきゃはし
See All by たきゃはし
AI時代のWebセキュリティリスク_レビュワーを救いたい.pdf
takahashiyuya
0
460
5分で「へぇ〜」がひとつ増える、PHPの”気になる”関数の話
takahashiyuya
0
310
Laravelのヘルパー
takahashiyuya
1
2.7k
PSR が分かってきた
takahashiyuya
0
590
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Mind Mapping
helmedeiros
PRO
1
300
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
790
The Language of Interfaces
destraynor
162
27k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Speed Design
sergeychernyshev
33
2k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
270
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
690
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
590
Abbi's Birthday
coloredviolet
3
9.3k
Transcript
date()ͱ͔time()ͷؔ ΑΓDateTimeΫϥεͬ ͨํ͕ྑͦ͞͏తͳ ͖ͨΌ͠@takahashiyuya PHPΧϯϑΝϨϯεԬ2019
ࣗݾհ • ͖ͨΌ͠ @takahashiyuya • େࡕग़౦ژࡏॅϑϦʔϥϯε • ͓͍͍͠ͷ 🍺 🍜
🍣 Ԭ࠷ߴ͔ʁʁʁ • Laravel ͢͜ʢEloquentআ͘ʣ
None
date() ͱ͔͏ͱࠔΔ͜ͱ ͳʙʙʙΜͩʁʁʁ
ݱ࣌ࠁΛج४ͱ͢Δ ςετ͕Ͱ͖ͳ͍
͋ΔΤϯδχΞʹى͖ͨ൵ܶ • ʮ20197݄7ʹϥοΩʔΩϟϯϖʔϯͰαΠτΛ ද͍ࣔͨ͠ ͔ΒΑΖ͘͠ʂΊͪΌͪ͘ΌେࣄͳҊ݅ͩ ͔Β͔ͬ͠ΓνΣοΫͯ͠Ͷʂʯ • ʮɾɾɾ͋ɺ͍ɻʯ ্࢘ ΤϯδχΞ
ͱΓ͋͑ͣ • ʮɾɾɾΑ͠Ͱ͖ͨɻͰɺdate() ϥϯλΠϜʢ࣮ ߦ࣌ʣͷΛฦ͔͢Βࠓ֬ೝͷ͠Α͏͕ͳ͍Α ͳ͊ɻʯ <?php if (date('Y-m-d') ===
'20197݄7') { lucky_campaign_site(); }
ςετͯ͠ͳ͍ͷͰؾ͔ͳ͍ • ʮେࣄͳҊ͔݅ͩΒ͔ͬ͠ΓνΣοΫͯ͠Ͷͱґཔ͞ Ε͍ͯΔ͚ͲͲ͏͢Ε͍͍ΜͩΖ͏͔ɻ·͊͜Μͳ ؆୯ͳذͰؒҧ͑Δ͕ͣͳ͍͜͠ΕͰϦϦʔε͠ ͪΌ͓͏ɻʯ <?php if (date('Y-m-d') ===
'20197݄7') { lucky_campaign_site(); }
Ωϟϯϖʔϯ αΠτදࣔ͞Ε·ͤΜͰͨ͠ɾɾɾ ※͜ͷޠϑΟΫγϣϯͰ͢ɻ
͜͜·Ͱ ݱ࣌ࠁΛج४ͱ͢Δςετ͕ Ͱ͖ͳ͍ͱ͜͏ͳΔ͔ʙͳ
ʮͲ͏͢Ε͍͍ΜͩΖ͏͔ʯ ͱ͓ࠔΓͷํͷ͝ఏҊ
DateTimeΫϥε͓Αͼ֦ு ϥΠϒϥϦͷCarbonΛ͏ͷ ͍͔͕Ͱ͠ΐ͏͔
Carbon ͱ • DateTime ֦ுϥΠϒϥϦ • setTestNow() Ͱݱ࣌ࠁͷมߋ͕Մೳ • ๛ͳػೳɺ͔Ώ͍ͱ͜Ζʹख͕ಧͭ͘
• Πϛϡʔλϒϧ ʢCarbonImmutableʣ • ಛʹཧ༝ͳ͚Ε͓͢͢Ί
Carbon ͱ • DateTime ֦ுϥΠϒϥϦ • setTestNow() Ͱݱ࣌ࠁͷมߋ͕Մೳ • ๛ͳػೳɺ͔Ώ͍ͱ͜Ζʹख͕ಧͭ͘
• Πϛϡʔλϒϧ ʢCarbonImmutableʣ • ಛʹཧ༝ͳ͚Ε͓͢͢Ί
Carbon ͷ setTestNow() ͱ • Carbon::now() ͷ݁Ռ͕ Carbon::setTestNow() Ͱࢦఆͨ࣌͠ͱ ͳΔ
<?php require_once './vendor/autoload.php'; use Carbon\Carbon; echo Carbon::now()->format('Y-m-d'); // 2019-06-29 Carbon::setTestNow('2019-07-07'); echo Carbon::now()->format('Y-m-d'); // 2019-07-07
setTestNow()Λ͍ɺdate() ΛCarbonͷػೳ ʹมߋͯ͠ςετΛ͢Δ <?php require_once './vendor/autoload.php'; use Carbon\Carbon; Carbon::setTestNow('2019-07-07'); if
(Carbon::now()->format('Y-m-d') === '20197݄7') { lucky_campaign_site(); } • ͜ΕͰը໘͔ΒςετͰ͖ΔɻΩϟϯϖʔϯαΠτ͕දࣔ͞Εͳ ͍͜ͱʹؾ͘ͷͰɺʹͳΔલʹ͜ͷόάղফͰ͖ͨͣ Ͱ͋Δɻ
͠Ωϟϯϖʔϯʹ։࠵ظ͕ؒ͋ͬͨΒ։ ࢝ͱऴྃͷΛڥքͱͯ͠ςετ͢Δ ඞཁ͕͋Γ·͢ ͦ͏͍ͬͨϢχοτςετΛॻ͘͜ͱΛ ఆ͢ΔͳΒϥϯλΠϜ͔͠ฦͤͳ͍ date() time() ͑ͳ͍ DateTimeΫϥε
setTimeNow() ͷΑ͏ ͳػೳΛ࣋ͭ Carbon Λͬͨ΄͏͕ྑ͞ ͦ͏తͰ͋Δͱݴ͑ΔͣͰ͢
Carbon͔ͬΓͳͷͰDateTime ͷ৭ʑհίʔφʔ • ִؒ DateInterval • ִؒࢦࣔࢠ interval_spec • ظؒ
DatePeriod • Πϛϡʔλϒϧ DateTimeImmutable
Carbon͔ͬΓͳͷͰDateTime ͷ৭ʑհίʔφʔ • ִؒ DateInterval • ִؒࢦࣔࢠ interval_spec • ظؒ
DatePeriod • Πϛϡʔλϒϧ DateTimeImmutable
ִؒ DateInterval • ͷִؒͦͷͷΛදݱ͢Δɻʢ3ͱ͔2 ͱ͔ʣ • DateTime ͷ diff() ͕ฦ͢ܕ
• ִؒࢦࣔࢠʢinterval_specʣͰੜ͢Δ • ࣍ϖʔδͰઆ໌͠·͢
ִؒࢦࣔࢠʢinterval_specʣ • PʢPeriodʣ͔Β࢝·Δจࣈྻ • YMDHMS େ͖͍ॱʹࢦఆ͢Δඞཁ͕͋ΔʢলུՄʣ • HҎ߱Λࢦఆ͢Δ߹TΛઌʹ͚·͢ • ྫɿP2D
2 ɺ PT2S 2 ඵɺ P2YT2M 2 ͱ 2 • ৄ͘͠ ISO 8601 duration speci fi cation Λࢀর
Carbon͔ͬΓͳͷͰDateTime ͷ৭ʑհίʔφʔ • ִؒ DateInterval • ִؒࢦࣔࢠ interval_spec • ظؒ
DatePeriod • Πϛϡʔλϒϧ DateTimeImmutable
ظؒ DatePeriod • ͷظؒͦͷͷΛදݱ͢Δɻ • Traversable Λ࣮͍ͯ͠Δʢͭ·Γforeach ͰϧʔϓͰ͖ΔΦϒδΣΫτʹͳΔʣ • ظؒ։࢝ͱऴྃΛϧʔϓ͢Δ͚ͩͰͳ͘ɺ
ִؒʢDateIntervalʣ෮ճͷࢦఆՄ ೳɻ
DatePeriod ͷ༻ྫ <?php $begin = new DateTime('2019-07-01'); $end = (new
DateTime('2019-07-31'))->modify('+1 day'); $interval = new DateInterval('P1D'); $dateRange = new DatePeriod($begin, $interval, $end); foreach ($dateRange as $date) { echo $date->format("Ym݄d") . PHP_EOL; } • 20197݄1͔Β20197݄31·Ͱग़ྗ • $begin, $end, $interval Λͱʹੜͨ͠DatePriodͷ $dataRangeTraversableͳͷͰɺforeachͰϧʔϓՄೳɻ
Carbon͔ͬΓͳͷͰDateTime ͷ৭ʑհίʔφʔ • ִؒ DateInterval • ִؒࢦࣔࢠ interval_spec • ظؒ
DatePeriod • Πϛϡʔλϒϧ DateTimeImmutable
Πϛϡʔλϒϧ DateTimeImmutable • ෆมɻৼΔ͍ʹΑͬͯঢ়ଶͷมߋͤͣɺͣ ৗʹ৽͍͠ΦϒδΣΫτΛฦ͢ɻ • ͓͢͢ΊɻͪΖΜCarbonImmutable͓͢ ͢Ίɻ
·ͱΊ date()time()ΛϩδοΫʹ ͏ͱςετ͕ॻ͚ͳ͔ͬͨ Γటष͍࣮ʹͳΓ͕ͪͳͷ ͰɺDateTimeCarbonͰε Ϛʔτʹ࣮ͯ͠Έ͍͔ͯ ͕Ͱ͠ΐ͏͔ɻ