summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorMáté Kocsis <kocsismate@woohoolabs.com>2020-01-22 00:13:29 +0100
committerMáté Kocsis <kocsismate@woohoolabs.com>2020-01-22 19:59:40 +0100
commit476636841f450cf90c4a2a9516160303f0df3cb7 (patch)
tree4bbaefeeb14c7f78c0c6aba9818e5fc14c56e201 /ext
parent3987a31130edcad36b2fff42d13bed66c1f6ba1c (diff)
downloadphp-git-476636841f450cf90c4a2a9516160303f0df3cb7.tar.gz
Fix #78649 Provide ICU RELATIVE_ constants
Closes GH-5105
Diffstat (limited to 'ext')
-rw-r--r--ext/intl/dateformat/dateformat.c4
-rw-r--r--ext/intl/tests/dateformat_format_relative.phpt72
2 files changed, 76 insertions, 0 deletions
diff --git a/ext/intl/dateformat/dateformat.c b/ext/intl/dateformat/dateformat.c
index 79e1a3f492..10d9dde96e 100644
--- a/ext/intl/dateformat/dateformat.c
+++ b/ext/intl/dateformat/dateformat.c
@@ -44,6 +44,10 @@ void dateformat_register_constants( INIT_FUNC_ARGS )
DATEFORMATTER_EXPOSE_CLASS_CONST( MEDIUM );
DATEFORMATTER_EXPOSE_CLASS_CONST( SHORT );
DATEFORMATTER_EXPOSE_CLASS_CONST( NONE );
+ DATEFORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "RELATIVE_FULL", UDAT_FULL_RELATIVE );
+ DATEFORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "RELATIVE_LONG", UDAT_LONG_RELATIVE );
+ DATEFORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "RELATIVE_MEDIUM", UDAT_MEDIUM_RELATIVE );
+ DATEFORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "RELATIVE_SHORT", UDAT_SHORT_RELATIVE );
/*
DATEFORMATTER_EXPOSE_CUSTOM_CLASS_CONST( "GREGORIAN", DATEF_GREGORIAN );
diff --git a/ext/intl/tests/dateformat_format_relative.phpt b/ext/intl/tests/dateformat_format_relative.phpt
new file mode 100644
index 0000000000..f8e28220e5
--- /dev/null
+++ b/ext/intl/tests/dateformat_format_relative.phpt
@@ -0,0 +1,72 @@
+--TEST--
+datefmt_format_code() with relative formats
+--SKIPIF--
+<?php if (!extension_loaded("intl")) print "skip"; ?>
+--FILE--
+<?php
+
+printFormat(IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, getYesterday());
+printFormat(IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, getYesterday());
+printFormat(IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, getYesterday());
+printFormat(IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, getYesterday());
+
+printFormat(IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, getToday());
+printFormat(IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, getToday());
+printFormat(IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, getToday());
+printFormat(IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, getToday());
+
+printFormat(IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, getTomorrow());
+printFormat(IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, getTomorrow());
+printFormat(IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, getTomorrow());
+printFormat(IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, getTomorrow());
+
+printFormat(IntlDateFormatter::RELATIVE_FULL, IntlDateFormatter::NONE, getDayInPast());
+printFormat(IntlDateFormatter::RELATIVE_LONG, IntlDateFormatter::NONE, getDayInPast());
+printFormat(IntlDateFormatter::RELATIVE_MEDIUM, IntlDateFormatter::NONE, getDayInPast());
+printFormat(IntlDateFormatter::RELATIVE_SHORT, IntlDateFormatter::NONE, getDayInPast());
+
+function printFormat(int $dateFormat, int $timeFormat, DateTimeImmutable $time) {
+ $formatter = new IntlDateFormatter(
+ "en_US",
+ $dateFormat,
+ $timeFormat,
+ "America/Los_Angeles",
+ IntlDateFormatter::GREGORIAN
+ );
+
+ echo $formatter->format($time) . "\n";
+}
+
+function getToday(): DateTimeImmutable {
+ return new DateTimeImmutable();
+}
+
+function getYesterday(): DateTimeImmutable {
+ return new DateTimeImmutable("-1 day");
+}
+
+function getTomorrow(): DateTimeImmutable {
+ return new DateTimeImmutable("+1 day");
+}
+
+function getDayInPast(): DateTimeImmutable {
+ return new DateTimeImmutable("2020-01-20 20:20:20", new DateTimeZone("UTC"));
+}
+
+--EXPECT--
+yesterday
+yesterday
+yesterday
+yesterday
+today
+today
+today
+today
+tomorrow
+tomorrow
+tomorrow
+tomorrow
+Monday, January 20, 2020
+January 20, 2020
+Jan 20, 2020
+1/20/20