Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
date()とかtime()の関数よりDateTimeクラス使った方が良さそう的な話
Search
たきゃはし
June 29, 2019
18
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
510
5分で「へぇ〜」がひとつ増える、PHPの”気になる”関数の話
takahashiyuya
0
350
Laravelのヘルパー
takahashiyuya
1
2.7k
PSR が分かってきた
takahashiyuya
0
590
Featured
See All Featured
Abbi's Birthday
coloredviolet
4
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
370
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
620
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
580
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Ethics towards AI in product and experience design
skipperchong
2
430
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
750
Claude Code のすすめ
schroneko
67
230k
Making Projects Easy
brettharned
120
6.8k
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Ͱε Ϛʔτʹ࣮ͯ͠Έ͍͔ͯ ͕Ͱ͠ΐ͏͔ɻ