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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
たきゃはし
June 29, 2019
15
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
400
5分で「へぇ〜」がひとつ増える、PHPの”気になる”関数の話
takahashiyuya
0
290
Laravelのヘルパー
takahashiyuya
1
2.7k
PSR が分かってきた
takahashiyuya
0
590
Featured
See All Featured
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
What's in a price? How to price your products and services
michaelherold
247
13k
Producing Creativity
orderedlist
PRO
348
40k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Statistics for Hackers
jakevdp
799
230k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
980
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
860
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
400
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
150
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
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Ͱε Ϛʔτʹ࣮ͯ͠Έ͍͔ͯ ͕Ͱ͠ΐ͏͔ɻ