Když DateTime nestačí
�Práce s časem pohodlně a bezpečně
Jiří Pudil
su z Brna
fanoušek open-source
závislák na kávě
generátor hluku ze strun
Photo by Aron Visuals on Unsplash
Co je to vlastně ten čas?
[Time is] complicated.�Very complicated.
— The Doctor
Co je to vlastně ten čas?
Time is the continued sequence of existence and events that occurs in an apparently irreversible succession from the past, through the present, into the future. — Wikipedia
Co je to vlastně ten čas?
Time is often referred to as a fourth dimension, along with three spatial dimensions. — Wikipedia
Co je to vlastně ten čas?
The dimension of a […] space is informally defined as the minimum number of coordinates needed to specify any point within it. — Wikipedia
Co je to vlastně ten čas?
The dimension of a […] space is informally defined as the minimum number of coordinates needed to specify any point within it. — Wikipedia
Co je to vlastně ten čas?
The dimension of a […] space is informally defined as the minimum number of coordinates needed to specify any point within it. — Wikipedia
Přesný bod v čase?
The universe, and time itself, had a beginning in the Big Bang, about�15 billion years ago. — Stephen Hawking, The Beginning of Time
více než 473,364,000,000,000,000 sekund
Přesný bod v čase!
Unix time is defined as the number of seconds that have elapsed since 00:00:00 UTC, Thursday, 1 January 1970, minus the number of leap seconds that have taken place since then. — Wikipedia
více než 1,650,000,000 sekund
EPOCHA
Datum a čas
Jak identifikovat BOD V ČASE praktickým způsobem?
více než 1,650,000,000 sekund
EPOCHA
Datum a čas
Jak identifikovat BOD V ČASE praktickým způsobem?
1,654,265,700
Stručná historie času
Stručná historie měření času
Photo by Luis Graterol on Unsplash
Photo by Peter Gonzalez on Unsplash
Photo by Laura Ockel on Unsplash
Photo by Fabrizio Verrecchia on Unsplash
Photo by peter bucks on Unsplash
Photo by Denis Chick on Unsplash
Photo by originalpickaxe on Wikimedia Commons
Photo by Josue Isai Ramos Figueroa on Unsplash
Photo by Glenn Carstens-Peters on Unsplash
Photo by Raphaël Biscaldi on Unsplash
Photo by Luis Graterol on Unsplash
Datum a čas
3. 6. 16:15
1,654,265,700 sekund
EPOCHA
Datum a čas
3. 6, 16:15 v Česku
3. 6, 15:15 v Anglii
4. 6. 0:15 v Austrálii
1,654,265,700 sekund
EPOCHA
Datum a čas
3. 6. 16:15�v Česku
1,654,265,700 sekund
EPOCHA
3. 6. 16:15�v Anglii
3600 sekund
Datum a čas
30. 10. 02:00�v Česku
1,667,088,000 sekund
EPOCHA
30. 10. 02:00�v Česku
3600 sekund
Datum a čas
27. 3. 01:00�v Česku
1,679,788,800 sekund
EPOCHA
27. 3. 03:00�v Česku
3600 sekund
IANA timezonedb
tzdb-2018a/ tzdb-2019a/ tzdb-2020a/ tzdb-2021a/ tzdb-2022a/�tzdb-2018b/ tzdb-2019b/ tzdb-2020b/ tzdb-2021b/�tzdb-2018c/ tzdb-2019c/ tzdb-2020c/ tzdb-2021c/�tzdb-2018d/ tzdb-2020d/ tzdb-2021d/�tzdb-2018e/ tzdb-2020e/ tzdb-2021e/�tzdb-2018f/ tzdb-2020f/�tzdb-2018g/�tzdb-2018h/�tzdb-2018i/
Photo by mohammad alizade on Unsplash
[Time is] complicated.�Very complicated.
— The Doctor
Čas ve webových aplikacích
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
Flight time approx. 2h 15min
Flight PAP101
WELCOME ON BOARD!
Starý dobrý \DateTime
Starý dobrý \DateTime
Photo by Alex Knight on Unsplash
Photo by Ana Azevedo on Unsplash
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
new DateTime('2022-06-04')
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
new DateTime('2022-06-04')
=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
new DateTime('2022-06-04')
=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
new DateTime('2022-06-04')
=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 13:30:00')
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 13:30:00')
=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 13:30:00')
=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 13:30:00')
=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 14:45:00')
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 14:45:00')
=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 14:45:00')
=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
$tz = new DateTimeZone('Europe/London')
new DateTime('2022-06-04 14:45:00', $tz)
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
$tz = new DateTimeZone('Europe/London')
new DateTime('2022-06-04 14:45:00', $tz)
=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
$tz = new DateTimeZone('Europe/London')
new DateTime('2022-06-04 14:45:00', $tz)
=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
$tz = new DateTimeZone('Europe/London')
new DateTime('2022-06-04 14:45:00', $tz)
=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$opens = new DateTime('08:00:00')
$closes = new DateTime('22:00:00')
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$opens = new DateTime('08:00:00')
$closes = new DateTime('22:00:00')
=> DateTime {� date: 2022-06-03 08:00:00.0 Europe/Prague (+02:00)� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$monday = 🤔
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> 1654009641
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')
$boardingCloses = $departs->modify('-20 minutes')
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')
$boardingCloses = $departs->modify('-20 minutes')�=> DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')
$boardingCloses = $departs->modify('-20 minutes')�=> DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$departs = new DateTime('2022-06-04 13:30:00')
$checkInOpens = $departs->modify('-1 month')
=> DateTime {� date: 2022-05-04 13:30:00.0 Europe/Prague (+02:00)� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')
$boardingCloses = $departs->sub(new DateInterval('PT20M'))�=> DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$departs = new DateTime('2022-06-04 13:30:00')
$checkInOpens = $departs->sub(new DateInterval('P1M'))
=> DateTime {� date: 2022-05-04 13:30:00.0 Europe/Prague (+02:00)� }
Flight time approx. 2h 15min
Flight PAP101
WELCOME ON BOARD!
new DateInterval('PT2H15M')
=> DateInterval {� interval: + 02:15:00.0� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateInterval('P1MT2H')
=> DateInterval {� interval: + 1mo 02:00:00.0� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateInterval('P1MT2H')
=> DateInterval {� interval: + 1mo 02:00:00.0� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateInterval('P1MT2H')
=> DateInterval {� interval: + 1mo 02:00:00.0� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')
$boardingCloses = $departs->modify('-20 minutes')�=> $departs = DateTime {� date: 2022-06-04 13:10:00.0 Europe/Prague (+02:00)� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTimeImmutable('2022-06-04 13:30:00')
$boardingCloses = $departs->modify('-20 minutes')�=> $departs = DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
Datum a čas jsou
value objekty
Domain-Driven Design is an approach to software development that centers the development on programming a domain model that has a rich understanding of the processes and rules of a domain.
— Martin Fowler
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
new DateTime('2022-06-04')
=> DateTime {� date: 2022-06-04 00:00:00.0 Europe/Prague (+02:00)� }
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
new Date('2022-06-04')
=> Date {� date: 2022-06-04� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new DateTime('2022-06-04 13:30:00')
=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
new Time('13:30:00')
=> Time {� time: 13:30:00.0� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
$tz = new DateTimeZone('Europe/London')
new DateTime('2022-06-04 14:45:00', $tz)
=> DateTime {� date: 2022-06-04 14:45:00.0 Europe/London (+01:00)� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
$tz = new DateTimeZone('Europe/London')
new Time('14:45:00')
=> Time {� time: 2022-06-04 14:45:00.0� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$opens = new DateTime('08:00:00')
$closes = new DateTime('22:00:00')
=> DateTime {� date: 2022-06-03 08:00:00.0 Europe/Prague (+02:00)� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$opens = new Time('08:00:00')
$closes = new Time('22:00:00')
=> Time {� time: 08:00:00.0� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$monday = 🤔
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$monday = DayOfWeek::Monday
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> DateTime {� date: 2022-05-31 17:07:21.0 +02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateTime('2022-05-31 17:07:21+02:00')
=> 1654009641
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new PointInTime('2022-05-31 17:07:21+02:00')
=> PointInTime {� value: 1654009641� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')�=> DateTime {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')�=> DateTime {� date: 2022-06-04 13:30:00.0� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTimeTz('2022-06-04 13:30:00', $tz)�=> DateTimeTz {� date: 2022-06-04 13:30:00.0 Europe/Prague (+02:00)� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = new DateTime('2022-06-04 13:30:00')
$boardingCloses = $departs->sub(new TimeInterval('PT20M'))�=> DateTime {� date: 2022-06-04 13:10:00.0� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$departs = new DateTime('2022-06-04 13:30:00')
$checkInOpens = $departs->sub(new DateInterval('P1M'))
=> DateTime {� date: 2022-05-04 13:30:00.0� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
new DateInterval('PT20M')
=> throw Error
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
(new Time('13:30:00'))->plus(new DateInterval('P1M'))
=> throw Error
I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.
— Abraham Maslow
Photo by Anne Nygård on Unsplash
[Time is] complicated.�Very complicated.
— The Doctor
Photo by Robert Ruggiero on Unsplash
Photo by Barn Images on Unsplash
Photo by Alex Knight on Unsplash
Photo by Ana Azevedo on Unsplash
JSR 310 Date and Time API
JSR 310 Date and Time API
(jo, Java)
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
LocalDate.of(2022, 6, 4)
=> LocalDate {� 2022-06-04� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
LocalTime.of(13, 30)
=> LocalTime {� 13:30� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
val departs = LocalDateTime.of(2022, 6, 4, 13, 30)
println(departs)
=> LocalDateTime {� 2022-06-04T13:30� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
val monday = DayOfWeek.MONDAY
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
Instant.ofEpochSecond(1654009641)
=> Instant {� 2022-05-31T15:07:21Z� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
instant.atZone(ZoneId.of("Europe/Prague"))
=> ZonedDateTime {� 2022-05-31T17:07:21+02:00[Europe/Prague]� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
instant.atZone(ZoneOffset.ofHours(2))
=> ZonedDateTime {� 2022-05-31T17:07:21+02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
val zoned = instant.atZone(ZoneOffset.ofHours(2))
val utc = zoned.withZoneSameLocal(ZoneOffset.UTC)
=> ZonedDateTime {� 2022-05-31T17:07:21Z� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
val zoned = instant.atZone(ZoneOffset.ofHours(2))
val utc = zoned.withZoneSameInstant(ZoneOffset.UTC)
=> ZonedDateTime {� 2022-05-31T15:07:21Z� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
val departs = LocalDateTime.of(2022, 6, 4, 13, 30)
val boardingCloses = departs.minusMinutes(20)
println(boardingCloses)
=> LocalDateTime {� 2022-06-04T13:10� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
val departs = LocalDateTime.of(2022, 6, 4, 13, 30)
val boardingCloses = departs.minusMinutes(20)
println(departs)
=> LocalDateTime {� 2022-06-04T13:30� }
Flight time approx. 2h 15min
Flight PAP101
WELCOME ON BOARD!
val flightTime = Duration.ofHours(2).plusMinutes(15)
=> Duration {� PT2H15M� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
val oneMonth = Period.ofMonths(1)
=> Period {� P1M� }
Přepište svoje aplikace v Javě!
— já
Přepište svoje aplikace v Javě!
— já
Přepište svoje aplikace v Kotlinu!
— já
Přepište svoje aplikace v Kotlinu!
— já
composer require brick/date-time
OSR Ostrava
STN London Stansted
Jun 4
From
To
When
Search
LocalDate::of(2022, 6, 4);
=> LocalDate {� 2022-06-04� }
OSR Ostrava → STN London Stansted� 13:30 14:45
Flight PAP101
Book
Jun 4
LocalTime::of(13, 30)
=> LocalTime {� 13:30� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = LocalDateTime::of(2022, 6, 4, 13, 30)
=> LocalDateTime {� 2022-06-04T13:30� }
Ostrava Airport Lounge
OPEN
Mon – Fri 08:00 – 22:00
Sat – Sun 09:00 – 17:00
Book
$monday = DayOfWeek::monday()
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
Instant::of(1654009641)
=> Instant {� 2022-05-31T15:07:21Z� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$instant->atZone(TimeZoneRegion::of("Europe/Prague"))
=> ZonedDateTime {� 2022-05-31T17:07:21+02:00[Europe/Prague]� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$instant->atZone(TimeZoneOffset::of(2))
=> ZonedDateTime {� 2022-05-31T17:07:21+02:00� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$zoned = $instant->atZone(TimeZoneOffset::of(2))
$utc = $zoned->withZoneSameLocal(TimeZone::utc())
=> ZonedDateTime {� 2022-05-31T17:07:21Z� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$zoned = $instant->atZone(TimeZoneOffset::of(2))
$utc = $zoned->withZoneSameInstant(TimeZone::utc())
=> ZonedDateTime {� 2022-05-31T15:07:21Z� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = LocalDateTime::of(2022, 6, 4, 13, 30)
$boardingCloses = $departs->minusMinutes(20)
var_dump($boardingCloses)
=> LocalDateTime {� 2022-06-04T13:10� }
Boarding Pass
PUDIL, JIRIMR
Jun 4
Departs�13:30
Boarding�12:40 – 13:10
$departs = LocalDateTime::of(2022, 6, 4, 13, 30)
$boardingCloses = $departs->minusMinutes(20)
var_dump($departs)
=> LocalDateTime {� 2022-06-04T13:30� }
Flight time approx. 2h 15min
Flight PAP101
WELCOME ON BOARD!
$flightTime = Duration::ofHours(2)->plusMinutes(15)
=> Duration {� PT2H15M� }
Booking YQG9H9EBR6WI
Confirmed May 31, 2022 at 17:07:21 UTC+2
Check-in
$oneMonth = Period::ofMonths(1)
=> Period {� P1M� }
composer require brick/date-time
Photo by mohammad alizade on Unsplash
[Time is] complicated.�Very complicated.
— The Doctor
Díky!
@jiripudil
jiripudil
me@jiripudil.cz
https://jiripudil.cz