13
WP time — PHP 4 code — partial PHP 5 retrofit — custom time zone logic — custom internationalization
Slide 14
14
WpDateTime — extends PHP DateTime classes — works around WP bugs — parses WP data github.com/Rarst/wpdatetime
Slide 15
15
wp_date (work in progress...) — core bugs audit & fixes — unified timezone processing — real timestamps & canonical UTC github.com/Rarst/wp-date
Slide 16
16
WP time zone options setting
gmt_offset timezone_string
Bucharest
3
'Europe/Bucharest'
UTC+3
'3'
''
#44985
Slide 17
17
WP time zone in all cases 1. get timezone_string 2. if empty — get gmt_offset 3. convert the offset number to ±00:00 (PHP 5.5+)
Slide 18
18
WpDateTimeZone to parse time zone $timezone = WpDateTimeZone::getWpTimezone();
setting
$timezone->getName()
Bucharest
'Europe/Bucharest'
UTC+3
'+03:00'
Hopefully in wp_date: wp_timezone()
Slide 19
19
date_i18n() DateTime
date()
date_i18n()
language
English
English
WP locale
time zone
arbitrary
current PHP
current WP
input
arbitrary
timestamp
“WP timestamp”
formats
date()
date()
date(), incomplete
developer.wordpress.org/reference/functions/date_i18n Hopefully in wp_date: wp_date()
Slide 20
20
Slide 21
21
date_i18n() logic echo date_i18n( 'j F Y, \o\r\a G:i T' ); 1. j F Y, \o\r\a G:i T 2. j \o\c\t\o\m\b\r\i\e Y, \o\r\a G:i T — locale 3. j \o\c\t\o\m\b\r\i\e Y, \o\r\a G:i \E\E\S\T — zone 4. 27 octombrie 2018, ora 16:00 EEST — date()
23
post_date post_date
post_date_gmt
post_title
2018-10-27 14:00:00
2018-10-27 13:00:00
A post made in London
WP set to London time zone: the_date( DATE_RFC3339 ); 2018-10-27T14:00:00+01:00
Slide 24
24
post_date fails w/ changed time zone post_date
post_date_gmt
post_title
2018-10-27 14:00:00
2018-10-27 13:00:00
A post made in London
WP set to Bucharest time zone: the_date( DATE_RFC3339 ); 2018-10-27T14:00:00+03:00
#38774
Slide 25
25
post_date in all cases 1. get post_date_gmt 2. if empty — get post_date 3. get WP time zone 4. adjust post_date[_gmt] with the time zone 5. convert to desired format
Slide 26
26
WpDateTime to parse post date post_date
post_date_gmt
post_title
2018-10-27 14:00:00
2018-10-27 13:00:00
A post made in London
WP set to Bucharest time zone: $time = WpDateTime::createFromPost( get_post() ); echo $time->formatI18n( DATE_RFC3339 ); 2018-10-27T16:00:00+03:00
Hopefully in wp_date: canonical UTC.
Slide 27
27
Takeaways — WP gets time storage and output wrong — read UTC time; write timestamp, UTC, or RFC 3339 — use DateTime to operate time — use WpDateTime to bridge WP and PHP — hope wp_date works out
Slide 28
28
Thank you for your time! Questions? twitter.com/Rarst wordpress.slack.com/messages/core-datetime
Rarst.net/slides/time-buc
Slide 29
29
Image credits — Photo by Adina Voicu CC0 — “Time” comic by Zach Weinersmith — Photo by Eugene Shelestov CC0