Merge branch 'microseconds' into PHP-7.1

This commit is contained in:
Derick Rethans 2016-10-05 15:32:11 -04:00
commit 14087d3d16
40 changed files with 1572 additions and 1268 deletions

15
NEWS
View File

@ -14,6 +14,21 @@ PHP NEWS
. Fixed bug #73126 (Cannot pass parameter 1 by reference). (Anatol)
. Fixed bug #69579 (Invalid free in extension trait). (John Boehr)
- Date:
. Fixed bug #45554 (Inconsistent behavior of the u format char). (Derick)
. Fixed bug #48225 (DateTime parser doesn't set microseconds for "now").
(Derick)
. Fixed bug #52514 (microseconds are missing in DateTime class). (Derick)
. Fixed bug #52519 (microseconds in DateInterval are missing). (Derick)
. Fixed bug #60089 (DateTime::createFromFormat() U after u nukes microtime).
(Derick)
. Fixed bug #68506 (General DateTime improvments needed for microseconds to
become useful). (Derick)
. Fixed bug #73109 (timelib_meridian doesn't parse dots correctly). (Derick)
. Fixed bug #73247 (DateTime constructor does not initialise microseconds
property). (Derick)
- GD:
. Fixed bug #50194 (imagettftext broken on transparent background w/o
alphablending). (cmb)

View File

@ -11,6 +11,7 @@ var tl_config = FSO.CreateTextFile("ext/date/lib/timelib_config.h", true);
tl_config.WriteLine("#include \"config.w32.h\"");
tl_config.WriteLine("#include <php_stdint.h>");
tl_config.WriteLine("#define TIMELIB_OMIT_STDINT 1");
tl_config.WriteLine("#define HAVE_GETTIMEOFDAY 1");
tl_config.WriteLine("#include \"zend.h\"");
tl_config.WriteLine("#define timelib_malloc emalloc");
tl_config.WriteLine("#define timelib_realloc erealloc");

View File

@ -65,6 +65,7 @@ timelib_rel_time *timelib_diff(timelib_time *one, timelib_time *two)
rt->h = two->h - one->h;
rt->i = two->i - one->i;
rt->s = two->s - one->s;
rt->f = two->f - one->f;
if (one_backup.dst == 0 && two_backup.dst == 1 && two->sse >= one->sse + 86400 - dst_corr) {
rt->h += dst_h_corr;
rt->i += dst_m_corr;
@ -110,6 +111,7 @@ timelib_time *timelib_add(timelib_time *old_time, timelib_rel_time *interval)
t->relative.h = interval->h * bias;
t->relative.i = interval->i * bias;
t->relative.s = interval->s * bias;
t->relative.f = interval->f * bias;
}
t->have_relative = 1;
t->sse_uptodate = 0;
@ -145,6 +147,7 @@ timelib_time *timelib_sub(timelib_time *old_time, timelib_rel_time *interval)
t->relative.h = 0 - (interval->h * bias);
t->relative.i = 0 - (interval->i * bias);
t->relative.s = 0 - (interval->s * bias);
t->relative.f = 0 - (interval->f * bias);
t->have_relative = 1;
t->sse_uptodate = 0;

File diff suppressed because it is too large Load Diff

View File

@ -925,6 +925,7 @@ clf = day "/" monthabbr "/" year4 ":" hour24lz ":" minutelz ":" sec
/* Timestamp format: @1126396800 */
timestamp = "@" "-"? [0-9]+;
timestampms = "@" "-"? [0-9]+ "." [0-9]{6};
/* To fix some ambiguities */
dateshortwithtimeshort12 = datenoyear timeshort12;
@ -1032,6 +1033,34 @@ weekdayof = (reltextnumber|reltexttext) space (dayfull|dayabbr) space 'of
return TIMELIB_RELATIVE;
}
timestampms
{
timelib_ull i, ms;
TIMELIB_INIT;
TIMELIB_HAVE_RELATIVE();
TIMELIB_UNHAVE_DATE();
TIMELIB_UNHAVE_TIME();
TIMELIB_HAVE_TZ();
i = timelib_get_unsigned_nr((char **) &ptr, 24);
ms = timelib_get_unsigned_nr((char **) &ptr, 24);
s->time->y = 1970;
s->time->m = 1;
s->time->d = 1;
s->time->h = s->time->i = s->time->s = 0;
s->time->f = 0.0;
s->time->relative.s += i;
s->time->relative.f = ((double) ms) / 1000000.0;
s->time->is_localtime = 1;
s->time->zone_type = TIMELIB_ZONETYPE_OFFSET;
s->time->z = 0;
s->time->dst = 0;
TIMELIB_DEINIT;
return TIMELIB_RELATIVE;
}
firstdayof | lastdayof
{
DEBUG_OUTPUT("firstdayof | lastdayof");
@ -2032,7 +2061,6 @@ timelib_time *timelib_parse_from_format(char *format, char *string, size_t len,
s->time->m = 1;
s->time->d = 1;
s->time->h = s->time->i = s->time->s = 0;
s->time->f = 0.0;
s->time->relative.s += tmp;
s->time->is_localtime = 1;
s->time->zone_type = TIMELIB_ZONETYPE_OFFSET;
@ -2190,13 +2218,20 @@ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options)
parsed->s = 0;
parsed->f = 0;
}
if (
parsed->y != TIMELIB_UNSET || parsed->m != TIMELIB_UNSET || parsed->d != TIMELIB_UNSET ||
parsed->h != TIMELIB_UNSET || parsed->i != TIMELIB_UNSET || parsed->s != TIMELIB_UNSET
) {
if (parsed->f == TIMELIB_UNSET) parsed->f = 0;
} else {
if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0;
}
if (parsed->y == TIMELIB_UNSET) parsed->y = now->y != TIMELIB_UNSET ? now->y : 0;
if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0;
if (parsed->m == TIMELIB_UNSET) parsed->m = now->m != TIMELIB_UNSET ? now->m : 0;
if (parsed->d == TIMELIB_UNSET) parsed->d = now->d != TIMELIB_UNSET ? now->d : 0;
if (parsed->h == TIMELIB_UNSET) parsed->h = now->h != TIMELIB_UNSET ? now->h : 0;
if (parsed->i == TIMELIB_UNSET) parsed->i = now->i != TIMELIB_UNSET ? now->i : 0;
if (parsed->s == TIMELIB_UNSET) parsed->s = now->s != TIMELIB_UNSET ? now->s : 0;
if (parsed->f == TIMELIB_UNSET) parsed->f = now->f != TIMELIB_UNSET ? now->f : 0;
if (parsed->z == TIMELIB_UNSET) parsed->z = now->z != TIMELIB_UNSET ? now->z : 0;
if (parsed->dst == TIMELIB_UNSET) parsed->dst = now->dst != TIMELIB_UNSET ? now->dst : 0;

View File

@ -231,7 +231,7 @@ void timelib_dump_date(timelib_time *d, int options)
printf("TS: %lld | %s%04lld-%02lld-%02lld %02lld:%02lld:%02lld",
d->sse, d->y < 0 ? "-" : "", TIMELIB_LLABS(d->y), d->m, d->d, d->h, d->i, d->s);
if (d->f > +0.0) {
printf(" %.5f", d->f);
printf(" %.6f", d->f);
}
if (d->is_localtime) {
@ -260,6 +260,9 @@ void timelib_dump_date(timelib_time *d, int options)
if (d->have_relative) {
printf("%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS",
d->relative.y, d->relative.m, d->relative.d, d->relative.h, d->relative.i, d->relative.s);
if (d->relative.f) {
printf(" %6f", d->relative.f);
}
if (d->relative.first_last_day_of != 0) {
switch (d->relative.first_last_day_of) {
case 1:

View File

@ -38,8 +38,8 @@
# define timelib_free free
#endif
#define TIMELIB_VERSION 201602
#define TIMELIB_ASCII_VERSION "2016.02"
#define TIMELIB_VERSION 201604
#define TIMELIB_ASCII_VERSION "2016.04"
#define TIMELIB_NONE 0x00
#define TIMELIB_OVERRIDE_TIME 0x01
@ -139,6 +139,7 @@ void timelib_time_set_option(timelib_time* tm, int option, void* option_value);
void timelib_time_dtor(timelib_time* t);
timelib_time* timelib_time_clone(timelib_time* orig);
int timelib_time_compare(timelib_time *t1, timelib_time *t2);
void timelib_set_fraction_from_timeval(timelib_time *t, struct timeval tp);
timelib_time_offset* timelib_time_offset_ctor(void);
void timelib_time_offset_dtor(timelib_time_offset* t);

View File

@ -77,4 +77,4 @@ stdlib.h
])
dnl Check for strtoll, atoll
AC_CHECK_FUNCS(strtoll atoll strftime)
AC_CHECK_FUNCS(strtoll atoll strftime gettimeofday)

View File

@ -125,7 +125,7 @@ typedef unsigned __int64 uint64_t;
#include <strings.h>
#endif
#if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)
#if (defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)) && !defined(TIMELIB_FORCE_LONG32)
typedef int64_t timelib_long;
typedef uint64_t timelib_ulong;
# define TIMELIB_LONG_MAX INT64_MAX
@ -216,6 +216,7 @@ typedef struct timelib_special {
typedef struct timelib_rel_time {
timelib_sll y, m, d; /* Years, Months and Days */
timelib_sll h, i, s; /* Hours, mInutes and Seconds */
double f; /* Fraction */
int weekday; /* Stores the day in 'next monday' */
int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */

View File

@ -5,10 +5,16 @@
{ "acdt", 1, 37800, "Australia/South" },
{ "acdt", 1, 37800, "Australia/Yancowinna" },
{ "acst", 1, -14400, "America/Porto_Acre" },
{ "acst", 0, 32400, "Australia/Adelaide" },
{ "acst", 0, 34200, "Australia/Adelaide" },
{ "acst", 1, -14400, "America/Eirunepe" },
{ "acst", 1, -14400, "America/Rio_Branco" },
{ "acst", 1, -14400, "Brazil/Acre" },
{ "acst", 0, 32400, "Australia/Broken_Hill" },
{ "acst", 0, 32400, "Australia/Darwin" },
{ "acst", 0, 32400, "Australia/North" },
{ "acst", 0, 32400, "Australia/South" },
{ "acst", 0, 32400, "Australia/Yancowinna" },
{ "acst", 0, 34200, "Asia/Jayapura" },
{ "acst", 0, 34200, "Australia/Broken_Hill" },
{ "acst", 0, 34200, "Australia/Darwin" },
@ -71,23 +77,16 @@
{ "ahst", 0, -36000, "America/Atka" },
{ "akdt", 1, -28800, "America/Anchorage" },
{ "akdt", 1, -28800, "America/Juneau" },
{ "akdt", 1, -28800, "America/Metlakatla" },
{ "akdt", 1, -28800, "America/Nome" },
{ "akdt", 1, -28800, "America/Sitka" },
{ "akdt", 1, -28800, "America/Yakutat" },
{ "akst", 0, -32400, "America/Anchorage" },
{ "akst", 0, -32400, "America/Juneau" },
{ "akst", 0, -32400, "America/Metlakatla" },
{ "akst", 0, -32400, "America/Nome" },
{ "akst", 0, -32400, "America/Sitka" },
{ "akst", 0, -32400, "America/Yakutat" },
{ "aktst", 1, 21600, "Asia/Aqtobe" },
{ "aktt", 0, 21600, "Asia/Aqtobe" },
{ "aktt", 0, 14400, "Asia/Aqtobe" },
{ "aktt", 0, 18000, "Asia/Aqtobe" },
{ "almst", 1, 25200, "Asia/Almaty" },
{ "almt", 0, 21600, "Asia/Almaty" },
{ "almt", 0, 18000, "Asia/Almaty" },
{ "amst", 1, 18000, "Asia/Yerevan" },
{ "amst", 1, 14400, "Asia/Yerevan" },
{ "amst", 1, -10800, "America/Boa_Vista" },
{ "amst", 1, -10800, "America/Campo_Grande" },
{ "amst", 1, -10800, "America/Cuiaba" },
@ -95,8 +94,6 @@
{ "amst", 1, -10800, "America/Porto_Velho" },
{ "amst", 1, -10800, "America/Santarem" },
{ "amst", 1, -10800, "Brazil/West" },
{ "amt", 0, 14400, "Asia/Yerevan" },
{ "amt", 0, 10800, "Asia/Yerevan" },
{ "amt", 0, -13840, "America/Asuncion" },
{ "amt", 0, -14400, "America/Boa_Vista" },
{ "amt", 0, -14400, "America/Campo_Grande" },
@ -111,12 +108,6 @@
{ "amt", 0, -14400, "Brazil/West" },
{ "amt", 0, 1172, "Europe/Amsterdam" },
{ "amt", 0, 5692, "Europe/Athens" },
{ "anast", 1, 50400, "Asia/Anadyr" },
{ "anast", 1, 43200, "Asia/Anadyr" },
{ "anast", 1, 46800, "Asia/Anadyr" },
{ "anat", 0, 46800, "Asia/Anadyr" },
{ "anat", 0, 39600, "Asia/Anadyr" },
{ "anat", 0, 43200, "Asia/Anadyr" },
{ "ant", 0, -16200, "America/Curacao" },
{ "ant", 0, -16200, "America/Aruba" },
{ "ant", 0, -16200, "America/Kralendijk" },
@ -128,12 +119,6 @@
{ "apt", 1, -10800, "America/Pangnirtung" },
{ "apt", 1, -10800, "America/Puerto_Rico" },
{ "apt", 1, -10800, "Canada/Atlantic" },
{ "aqtst", 1, 21600, "Asia/Aqtau" },
{ "aqtst", 1, 18000, "Asia/Aqtau" },
{ "aqtst", 1, 21600, "Asia/Aqtobe" },
{ "aqtt", 0, 18000, "Asia/Aqtau" },
{ "aqtt", 0, 14400, "Asia/Aqtau" },
{ "aqtt", 0, 18000, "Asia/Aqtobe" },
{ "arst", 1, -7200, "America/Buenos_Aires" },
{ "arst", 1, -10800, "America/Buenos_Aires" },
{ "arst", 1, -10800, "America/Argentina/Buenos_Aires" },
@ -214,14 +199,6 @@
{ "art", 0, -14400, "America/Mendoza" },
{ "art", 0, -14400, "America/Rosario" },
{ "art", 0, -14400, "Antarctica/Palmer" },
{ "ashst", 1, 21600, "Asia/Ashkhabad" },
{ "ashst", 1, 18000, "Asia/Ashkhabad" },
{ "ashst", 1, 18000, "Asia/Ashgabat" },
{ "ashst", 1, 21600, "Asia/Ashgabat" },
{ "asht", 0, 18000, "Asia/Ashkhabad" },
{ "asht", 0, 14400, "Asia/Ashkhabad" },
{ "asht", 0, 14400, "Asia/Ashgabat" },
{ "asht", 0, 18000, "Asia/Ashgabat" },
{ "ast", 0, 10800, "Asia/Riyadh" },
{ "ast", 0, -14400, "America/Anguilla" },
{ "ast", 0, -14400, "America/Antigua" },
@ -265,7 +242,6 @@
{ "awdt", 1, 32400, "Australia/Perth" },
{ "awdt", 1, 32400, "Australia/West" },
{ "awst", 0, 28800, "Australia/Perth" },
{ "awst", 0, 28800, "Antarctica/Casey" },
{ "awst", 0, 28800, "Australia/West" },
{ "awt", 1, -10800, "America/Halifax" },
{ "awt", 1, -10800, "America/Blanc-Sablon" },
@ -279,14 +255,6 @@
{ "azost", 1, -3600, "Atlantic/Azores" },
{ "azot", 0, -3600, "Atlantic/Azores" },
{ "azot", 0, -7200, "Atlantic/Azores" },
{ "azst", 1, 18000, "Asia/Baku" },
{ "azst", 1, 14400, "Asia/Baku" },
{ "azt", 0, 14400, "Asia/Baku" },
{ "azt", 0, 10800, "Asia/Baku" },
{ "bakst", 1, 18000, "Asia/Baku" },
{ "bakst", 1, 14400, "Asia/Baku" },
{ "bakt", 0, 14400, "Asia/Baku" },
{ "bakt", 0, 10800, "Asia/Baku" },
{ "bdst", 1, 7200, "Europe/London" },
{ "bdst", 1, 25200, "Asia/Dacca" },
{ "bdst", 1, 25200, "Asia/Dhaka" },
@ -326,7 +294,11 @@
{ "bmt", 0, -14309, "America/Barbados" },
{ "bmt", 0, 6264, "Europe/Tiraspol" },
{ "bmt", 0, -17776, "America/Bogota" },
{ "bmt", 0, 1050, "Europe/Brussels" },
{ "bmt", 0, 10656, "Asia/Baghdad" },
{ "bmt", 0, 1786, "Europe/Busingen" },
{ "bmt", 0, 1786, "Europe/Vaduz" },
{ "bmt", 0, 1786, "Europe/Zurich" },
{ "bmt", 0, 24124, "Asia/Bangkok" },
{ "bmt", 0, 24124, "Asia/Phnom_Penh" },
{ "bmt", 0, 24124, "Asia/Vientiane" },
@ -385,12 +357,12 @@
{ "burt", 0, 23400, "Asia/Dacca" },
{ "burt", 0, 23400, "Asia/Dhaka" },
{ "burt", 0, 23400, "Asia/Rangoon" },
{ "burt", 0, 23400, "Asia/Yangon" },
{ "cant", 0, -3600, "Atlantic/Canary" },
{ "capt", 1, -32400, "America/Anchorage" },
{ "cast", 0, 34200, "Australia/Adelaide" },
{ "cast", 1, 10800, "Africa/Juba" },
{ "cast", 1, 10800, "Africa/Khartoum" },
{ "cast", 0, 39600, "Antarctica/Casey" },
{ "cat", 0, -36000, "America/Anchorage" },
{ "cat", 0, 7200, "Africa/Khartoum" },
{ "cat", 0, 7200, "Africa/Blantyre" },
@ -466,7 +438,6 @@
{ "cest", 1, 7200, "Africa/Ceuta" },
{ "cest", 1, 7200, "Africa/Tripoli" },
{ "cest", 1, 7200, "Africa/Tunis" },
{ "cest", 1, 7200, "Antarctica/Troll" },
{ "cest", 1, 7200, "Arctic/Longyearbyen" },
{ "cest", 1, 7200, "Atlantic/Jan_Mayen" },
{ "cest", 1, 7200, "Europe/Amsterdam" },
@ -588,10 +559,7 @@
{ "clst", 1, -10800, "Chile/Continental" },
{ "clst", 1, -14400, "Chile/Continental" },
{ "clt", 0, -14400, "America/Santiago" },
{ "clt", 0, -10800, "America/Santiago" },
{ "clt", 0, -18000, "America/Santiago" },
{ "clt", 0, -10800, "Antarctica/Palmer" },
{ "clt", 0, -10800, "Chile/Continental" },
{ "clt", 0, -14400, "Antarctica/Palmer" },
{ "clt", 0, -14400, "Chile/Continental" },
{ "clt", 0, -18000, "Chile/Continental" },
@ -618,6 +586,7 @@
{ "cmt", 0, -16356, "America/La_Paz" },
{ "cmt", 0, -19176, "America/Cayman" },
{ "cmt", 0, -19176, "America/Panama" },
{ "cmt", 0, 3020, "Europe/Copenhagen" },
{ "cmt", 0, 6900, "Europe/Chisinau" },
{ "cmt", 0, 6900, "Europe/Tiraspol" },
{ "cost", 1, -14400, "America/Bogota" },
@ -738,22 +707,13 @@
{ "chst", 0, 36000, "Pacific/Saipan" },
{ "dact", 0, 21600, "Asia/Dacca" },
{ "dact", 0, 21600, "Asia/Dhaka" },
{ "davt", 0, 25200, "Antarctica/Davis" },
{ "davt", 0, 18000, "Antarctica/Davis" },
{ "ddut", 0, 36000, "Antarctica/DumontDUrville" },
{ "dmt", 0, -1521, "Europe/Dublin" },
{ "dusst", 1, 25200, "Asia/Dushanbe" },
{ "dusst", 1, 21600, "Asia/Dushanbe" },
{ "dust", 0, 21600, "Asia/Dushanbe" },
{ "dust", 0, 18000, "Asia/Dushanbe" },
{ "easst", 1, -21600, "Chile/EasterIsland" },
{ "easst", 1, -18000, "Chile/EasterIsland" },
{ "easst", 1, -18000, "Pacific/Easter" },
{ "easst", 1, -21600, "Pacific/Easter" },
{ "east", 0, -18000, "Chile/EasterIsland" },
{ "east", 0, -21600, "Chile/EasterIsland" },
{ "east", 0, -25200, "Chile/EasterIsland" },
{ "east", 0, -18000, "Pacific/Easter" },
{ "east", 0, -21600, "Pacific/Easter" },
{ "east", 0, -25200, "Pacific/Easter" },
{ "eat", 0, 10800, "Africa/Khartoum" },
@ -819,7 +779,6 @@
{ "eest", 1, 10800, "Europe/Moscow" },
{ "eest", 1, 10800, "Europe/Nicosia" },
{ "eest", 1, 10800, "Europe/Riga" },
{ "eest", 1, 10800, "Europe/Samara" },
{ "eest", 1, 10800, "Europe/Simferopol" },
{ "eest", 1, 10800, "Europe/Sofia" },
{ "eest", 1, 10800, "Europe/Tallinn" },
@ -921,8 +880,6 @@
{ "ewt", 1, -14400, "America/Thunder_Bay" },
{ "ewt", 1, -14400, "America/Toronto" },
{ "ewt", 1, -14400, "Canada/Eastern" },
{ "fet", 0, 10800, "Europe/Kaliningrad" },
{ "fet", 0, 10800, "Europe/Minsk" },
{ "ffmt", 0, -14660, "America/Martinique" },
{ "fjst", 1, 46800, "Pacific/Fiji" },
{ "fjt", 0, 43200, "Pacific/Fiji" },
@ -936,19 +893,9 @@
{ "fnst", 1, -3600, "Brazil/DeNoronha" },
{ "fnt", 0, -7200, "America/Noronha" },
{ "fnt", 0, -7200, "Brazil/DeNoronha" },
{ "fort", 0, 18000, "Asia/Aqtau" },
{ "fort", 0, 14400, "Asia/Aqtau" },
{ "frust", 1, 25200, "Asia/Bishkek" },
{ "frust", 1, 21600, "Asia/Bishkek" },
{ "frut", 0, 21600, "Asia/Bishkek" },
{ "frut", 0, 18000, "Asia/Bishkek" },
{ "galt", 0, -21600, "Pacific/Galapagos" },
{ "gamt", 0, -32400, "Pacific/Gambier" },
{ "gbgt", 0, -13500, "America/Guyana" },
{ "gest", 1, 14400, "Asia/Tbilisi" },
{ "gest", 1, 18000, "Asia/Tbilisi" },
{ "get", 0, 14400, "Asia/Tbilisi" },
{ "get", 0, 10800, "Asia/Tbilisi" },
{ "gft", 0, -14400, "America/Cayenne" },
{ "gft", 0, -10800, "America/Cayenne" },
{ "ghst", 1, 1200, "Africa/Accra" },
@ -990,11 +937,9 @@
{ "gyt", 0, -14400, "America/Guyana" },
{ "gyt", 0, -10800, "America/Guyana" },
{ "gyt", 0, -13500, "America/Guyana" },
{ "hadt", 1, -32400, "America/Adak" },
{ "hadt", 1, -32400, "America/Atka" },
{ "hast", 0, -36000, "America/Adak" },
{ "hast", 0, -36000, "America/Atka" },
{ "hdt", 1, -34200, "Pacific/Honolulu" },
{ "hdt", 1, -32400, "America/Adak" },
{ "hdt", 1, -32400, "America/Atka" },
{ "hdt", 1, -34200, "Pacific/Johnston" },
{ "hkst", 1, 32400, "Asia/Hong_Kong" },
{ "hkt", 0, 28800, "Asia/Hong_Kong" },
@ -1011,6 +956,8 @@
{ "hovt", 0, 21600, "Asia/Hovd" },
{ "hst", 0, -36000, "Pacific/Honolulu" },
{ "hst", 0, -37800, "Pacific/Honolulu" },
{ "hst", 0, -36000, "America/Adak" },
{ "hst", 0, -36000, "America/Atka" },
{ "hst", 0, -36000, "Pacific/Johnston" },
{ "hst", 0, -37800, "Pacific/Johnston" },
{ "ict", 0, 25200, "Asia/Bangkok" },
@ -1030,16 +977,11 @@
{ "imt", 0, 25025, "Asia/Irkutsk" },
{ "imt", 0, 7016, "Asia/Istanbul" },
{ "imt", 0, 7016, "Europe/Istanbul" },
{ "imt", 0, 7016, "Europe/Sofia" },
{ "iot", 0, 21600, "Indian/Chagos" },
{ "iot", 0, 18000, "Indian/Chagos" },
{ "irdt", 1, 16200, "Asia/Tehran" },
{ "irdt", 1, 18000, "Asia/Tehran" },
{ "irkst", 1, 32400, "Asia/Irkutsk" },
{ "irkst", 1, 28800, "Asia/Irkutsk" },
{ "irkt", 0, 28800, "Asia/Irkutsk" },
{ "irkt", 0, 25200, "Asia/Irkutsk" },
{ "irkt", 0, 32400, "Asia/Irkutsk" },
{ "irkt", 0, 28800, "Asia/Chita" },
{ "irst", 0, 12600, "Asia/Tehran" },
{ "irst", 0, 14400, "Asia/Tehran" },
{ "isst", 1, 0, "Atlantic/Reykjavik" },
@ -1067,7 +1009,6 @@
{ "ist", 0, 7200, "Asia/Tel_Aviv" },
{ "javt", 0, 26400, "Asia/Jakarta" },
{ "jcst", 0, 32400, "Asia/Pyongyang" },
{ "jcst", 0, 32400, "Asia/Sakhalin" },
{ "jcst", 0, 32400, "Asia/Seoul" },
{ "jcst", 0, 32400, "Asia/Tokyo" },
{ "jcst", 0, 32400, "ROK" },
@ -1087,11 +1028,11 @@
{ "jst", 0, 32400, "Asia/Pyongyang" },
{ "jst", 0, 32400, "Asia/Rangoon" },
{ "jst", 0, 32400, "Asia/Saigon" },
{ "jst", 0, 32400, "Asia/Sakhalin" },
{ "jst", 0, 32400, "Asia/Seoul" },
{ "jst", 0, 32400, "Asia/Singapore" },
{ "jst", 0, 32400, "Asia/Taipei" },
{ "jst", 0, 32400, "Asia/Ujung_Pandang" },
{ "jst", 0, 32400, "Asia/Yangon" },
{ "jst", 0, 32400, "Pacific/Bougainville" },
{ "jst", 0, 32400, "Pacific/Nauru" },
{ "jst", 0, 32400, "ROC" },
@ -1103,37 +1044,18 @@
{ "kdt", 1, 34200, "Asia/Seoul" },
{ "kdt", 1, 34200, "ROK" },
{ "kdt", 1, 36000, "ROK" },
{ "kgst", 1, 21600, "Asia/Bishkek" },
{ "kgt", 0, 18000, "Asia/Bishkek" },
{ "kgt", 0, 21600, "Asia/Bishkek" },
{ "kizst", 1, 21600, "Asia/Qyzylorda" },
{ "kizt", 0, 21600, "Asia/Qyzylorda" },
{ "kizt", 0, 14400, "Asia/Qyzylorda" },
{ "kizt", 0, 18000, "Asia/Qyzylorda" },
{ "kmt", 0, 5736, "Europe/Vilnius" },
{ "kmt", 0, -18431, "America/Grand_Turk" },
{ "kmt", 0, -18431, "America/Jamaica" },
{ "kmt", 0, 7324, "Europe/Kiev" },
{ "kost", 0, 43200, "Pacific/Kosrae" },
{ "kost", 0, 39600, "Pacific/Kosrae" },
{ "krast", 1, 28800, "Asia/Krasnoyarsk" },
{ "krast", 1, 25200, "Asia/Krasnoyarsk" },
{ "krast", 1, 25200, "Asia/Novokuznetsk" },
{ "krast", 1, 28800, "Asia/Novokuznetsk" },
{ "krat", 0, 25200, "Asia/Krasnoyarsk" },
{ "krat", 0, 21600, "Asia/Krasnoyarsk" },
{ "krat", 0, 28800, "Asia/Krasnoyarsk" },
{ "krat", 0, 21600, "Asia/Novokuznetsk" },
{ "krat", 0, 25200, "Asia/Novokuznetsk" },
{ "kst", 0, 30600, "Asia/Seoul" },
{ "kst", 0, 32400, "Asia/Pyongyang" },
{ "kst", 0, 32400, "Asia/Seoul" },
{ "kst", 0, 30600, "Asia/Pyongyang" },
{ "kst", 0, 30600, "ROK" },
{ "kst", 0, 32400, "ROK" },
{ "kuyst", 1, 18000, "Europe/Samara" },
{ "kuyt", 0, 14400, "Europe/Samara" },
{ "kuyt", 0, 10800, "Europe/Samara" },
{ "kwat", 0, -43200, "Pacific/Kwajalein" },
{ "lhdt", 1, 39600, "Australia/LHI" },
{ "lhdt", 1, 39600, "Australia/Lord_Howe" },
@ -1151,21 +1073,6 @@
{ "madmt", 1, 3600, "Atlantic/Madeira" },
{ "madst", 1, 0, "Atlantic/Madeira" },
{ "madt", 0, -3600, "Atlantic/Madeira" },
{ "magst", 1, 43200, "Asia/Magadan" },
{ "magst", 1, 39600, "Asia/Magadan" },
{ "magst", 1, 39600, "Asia/Srednekolymsk" },
{ "magst", 1, 39600, "Asia/Ust-Nera" },
{ "magst", 1, 43200, "Asia/Srednekolymsk" },
{ "magst", 1, 43200, "Asia/Ust-Nera" },
{ "magt", 0, 36000, "Asia/Magadan" },
{ "magt", 0, 39600, "Asia/Magadan" },
{ "magt", 0, 43200, "Asia/Magadan" },
{ "magt", 0, 36000, "Asia/Srednekolymsk" },
{ "magt", 0, 36000, "Asia/Ust-Nera" },
{ "magt", 0, 39600, "Asia/Srednekolymsk" },
{ "magt", 0, 39600, "Asia/Ust-Nera" },
{ "magt", 0, 43200, "Asia/Srednekolymsk" },
{ "magt", 0, 43200, "Asia/Ust-Nera" },
{ "malst", 1, 26400, "Asia/Singapore" },
{ "malst", 1, 26400, "Asia/Kuala_Lumpur" },
{ "malt", 0, 27000, "Asia/Singapore" },
@ -1175,8 +1082,6 @@
{ "malt", 0, 26400, "Asia/Kuala_Lumpur" },
{ "malt", 0, 27000, "Asia/Kuala_Lumpur" },
{ "mart", 0, -34200, "Pacific/Marquesas" },
{ "mawt", 0, 21600, "Antarctica/Mawson" },
{ "mawt", 0, 18000, "Antarctica/Mawson" },
{ "mddt", 1, -18000, "America/Cambridge_Bay" },
{ "mddt", 1, -18000, "America/Yellowknife" },
{ "mdst", 1, 16279, "Europe/Moscow" },
@ -1202,6 +1107,8 @@
{ "mdt", 1, -21600, "Canada/Mountain" },
{ "mdt", 1, -21600, "Canada/Saskatchewan" },
{ "mdt", 1, -21600, "Mexico/BajaSur" },
{ "mest", 1, 7200, "MET" },
{ "met", 0, 3600, "MET" },
{ "mht", 0, 43200, "Pacific/Kwajalein" },
{ "mht", 0, 39600, "Pacific/Kwajalein" },
{ "mht", 0, 39600, "Pacific/Majuro" },
@ -1215,6 +1122,7 @@
{ "mmt", 0, 17640, "Indian/Maldives" },
{ "mmt", 0, 19172, "Asia/Colombo" },
{ "mmt", 0, 23400, "Asia/Rangoon" },
{ "mmt", 0, 23400, "Asia/Yangon" },
{ "mmt", 0, 28656, "Asia/Makassar" },
{ "mmt", 0, 28656, "Asia/Ujung_Pandang" },
{ "mmt", 0, 6600, "Europe/Minsk" },
@ -1242,13 +1150,11 @@
{ "msd", 1, 14400, "Europe/Kiev" },
{ "msd", 1, 14400, "Europe/Minsk" },
{ "msd", 1, 14400, "Europe/Riga" },
{ "msd", 1, 14400, "Europe/Samara" },
{ "msd", 1, 14400, "Europe/Simferopol" },
{ "msd", 1, 14400, "Europe/Tallinn" },
{ "msd", 1, 14400, "Europe/Tiraspol" },
{ "msd", 1, 14400, "Europe/Uzhgorod" },
{ "msd", 1, 14400, "Europe/Vilnius" },
{ "msd", 1, 14400, "Europe/Volgograd" },
{ "msd", 1, 14400, "Europe/Zaporozhye" },
{ "msk", 0, 10800, "Europe/Moscow" },
{ "msk", 0, 14400, "Europe/Moscow" },
@ -1257,17 +1163,13 @@
{ "msk", 0, 10800, "Europe/Kiev" },
{ "msk", 0, 10800, "Europe/Minsk" },
{ "msk", 0, 10800, "Europe/Riga" },
{ "msk", 0, 10800, "Europe/Samara" },
{ "msk", 0, 10800, "Europe/Simferopol" },
{ "msk", 0, 10800, "Europe/Tallinn" },
{ "msk", 0, 10800, "Europe/Tiraspol" },
{ "msk", 0, 10800, "Europe/Uzhgorod" },
{ "msk", 0, 10800, "Europe/Vilnius" },
{ "msk", 0, 10800, "Europe/Volgograd" },
{ "msk", 0, 10800, "Europe/Zaporozhye" },
{ "msk", 0, 14400, "Europe/Simferopol" },
{ "msk", 0, 14400, "Europe/Volgograd" },
{ "msm", 1, 18000, "Europe/Moscow" },
{ "mst", 0, -25200, "America/Denver" },
{ "mst", 0, -25200, "America/Bahia_Banderas" },
{ "mst", 0, -25200, "America/Boise" },
@ -1277,6 +1179,7 @@
{ "mst", 0, -25200, "America/Dawson_Creek" },
{ "mst", 0, -25200, "America/Edmonton" },
{ "mst", 0, -25200, "America/Ensenada" },
{ "mst", 0, -25200, "America/Fort_Nelson" },
{ "mst", 0, -25200, "America/Hermosillo" },
{ "mst", 0, -25200, "America/Inuvik" },
{ "mst", 0, -25200, "America/Mazatlan" },
@ -1332,15 +1235,10 @@
{ "negt", 0, -12600, "America/Paramaribo" },
{ "nest", 1, 4800, "Europe/Amsterdam" },
{ "net", 0, 1200, "Europe/Amsterdam" },
{ "nfst", 1, 45000, "Pacific/Norfolk" },
{ "nft", 0, 41400, "Pacific/Norfolk" },
{ "nft", 0, 39600, "Pacific/Norfolk" },
{ "nmt", 0, 40320, "Pacific/Norfolk" },
{ "novst", 1, 25200, "Asia/Novosibirsk" },
{ "novst", 1, 28800, "Asia/Novosibirsk" },
{ "novst", 1, 25200, "Asia/Novokuznetsk" },
{ "novt", 0, 21600, "Asia/Novosibirsk" },
{ "novt", 0, 25200, "Asia/Novosibirsk" },
{ "novt", 0, 21600, "Asia/Novokuznetsk" },
{ "novt", 0, 25200, "Asia/Novokuznetsk" },
{ "npt", 1, -9000, "America/St_Johns" },
{ "npt", 0, 20700, "Asia/Katmandu" },
{ "npt", 1, -36000, "America/Adak" },
@ -1393,20 +1291,13 @@
{ "nzst", 1, 45000, "Antarctica/McMurdo" },
{ "nzst", 1, 45000, "Antarctica/South_Pole" },
{ "nzst", 1, 45000, "NZ" },
{ "omsst", 1, 25200, "Asia/Omsk" },
{ "omsst", 1, 21600, "Asia/Omsk" },
{ "omst", 0, 21600, "Asia/Omsk" },
{ "omst", 0, 18000, "Asia/Omsk" },
{ "omst", 0, 25200, "Asia/Omsk" },
{ "orast", 1, 18000, "Asia/Oral" },
{ "orat", 0, 18000, "Asia/Oral" },
{ "orat", 0, 14400, "Asia/Oral" },
{ "pddt", 1, -21600, "America/Inuvik" },
{ "pdt", 1, -25200, "America/Los_Angeles" },
{ "pdt", 1, -25200, "America/Boise" },
{ "pdt", 1, -25200, "America/Dawson" },
{ "pdt", 1, -25200, "America/Dawson_Creek" },
{ "pdt", 1, -25200, "America/Ensenada" },
{ "pdt", 1, -25200, "America/Fort_Nelson" },
{ "pdt", 1, -25200, "America/Juneau" },
{ "pdt", 1, -25200, "America/Metlakatla" },
{ "pdt", 1, -25200, "America/Santa_Isabel" },
@ -1418,10 +1309,6 @@
{ "pdt", 1, -25200, "Canada/Yukon" },
{ "pdt", 1, -25200, "Mexico/BajaNorte" },
{ "pest", 1, -14400, "America/Lima" },
{ "petst", 1, 46800, "Asia/Kamchatka" },
{ "petst", 1, 43200, "Asia/Kamchatka" },
{ "pett", 0, 43200, "Asia/Kamchatka" },
{ "pett", 0, 39600, "Asia/Kamchatka" },
{ "pet", 0, -18000, "America/Lima" },
{ "pgt", 0, 36000, "Pacific/Bougainville" },
{ "pgt", 0, 36000, "Pacific/Port_Moresby" },
@ -1435,12 +1322,14 @@
{ "plmt", 0, 25590, "Asia/Ho_Chi_Minh" },
{ "plmt", 0, 25590, "Asia/Saigon" },
{ "pmdt", 1, -7200, "America/Miquelon" },
{ "pmmt", 0, 35312, "Pacific/Bougainville" },
{ "pmst", 0, -10800, "America/Miquelon" },
{ "pmt", 0, -13236, "America/Paramaribo" },
{ "pmt", 0, -13252, "America/Paramaribo" },
{ "pmt", 0, 36000, "Antarctica/DumontDUrville" },
{ "pmt", 0, 13505, "Asia/Yekaterinburg" },
{ "pmt", 0, 26240, "Asia/Pontianak" },
{ "pmt", 0, 3464, "Europe/Bratislava" },
{ "pmt", 0, 3464, "Europe/Prague" },
{ "pmt", 0, 561, "Africa/Algiers" },
{ "pmt", 0, 561, "Africa/Tunis" },
{ "pmt", 0, 561, "Europe/Monaco" },
@ -1452,6 +1341,7 @@
{ "ppt", 1, -25200, "America/Los_Angeles" },
{ "ppt", 1, -25200, "America/Dawson_Creek" },
{ "ppt", 1, -25200, "America/Ensenada" },
{ "ppt", 1, -25200, "America/Fort_Nelson" },
{ "ppt", 1, -25200, "America/Juneau" },
{ "ppt", 1, -25200, "America/Metlakatla" },
{ "ppt", 1, -25200, "America/Santa_Isabel" },
@ -1467,6 +1357,7 @@
{ "pst", 0, -28800, "America/Dawson" },
{ "pst", 0, -28800, "America/Dawson_Creek" },
{ "pst", 0, -28800, "America/Ensenada" },
{ "pst", 0, -28800, "America/Fort_Nelson" },
{ "pst", 0, -28800, "America/Hermosillo" },
{ "pst", 0, -28800, "America/Inuvik" },
{ "pst", 0, -28800, "America/Juneau" },
@ -1485,6 +1376,7 @@
{ "pwt", 1, -25200, "America/Los_Angeles" },
{ "pwt", 1, -25200, "America/Dawson_Creek" },
{ "pwt", 1, -25200, "America/Ensenada" },
{ "pwt", 1, -25200, "America/Fort_Nelson" },
{ "pwt", 1, -25200, "America/Juneau" },
{ "pwt", 1, -25200, "America/Metlakatla" },
{ "pwt", 1, -25200, "America/Santa_Isabel" },
@ -1498,24 +1390,13 @@
{ "pyt", 0, -14400, "America/Asuncion" },
{ "pyt", 0, -10800, "America/Asuncion" },
{ "qmt", 0, -18840, "America/Guayaquil" },
{ "qyzst", 1, 25200, "Asia/Qyzylorda" },
{ "qyzt", 0, 21600, "Asia/Qyzylorda" },
{ "qyzt", 0, 18000, "Asia/Qyzylorda" },
{ "ret", 0, 14400, "Indian/Reunion" },
{ "rmt", 0, 5794, "Europe/Riga" },
{ "rmt", 0, 23080, "Asia/Rangoon" },
{ "rott", 0, -10800, "Antarctica/Rothera" },
{ "sakst", 1, 39600, "Asia/Sakhalin" },
{ "sakst", 1, 43200, "Asia/Sakhalin" },
{ "sakt", 0, 36000, "Asia/Sakhalin" },
{ "sakt", 0, 39600, "Asia/Sakhalin" },
{ "samst", 1, 21600, "Asia/Samarkand" },
{ "samst", 1, 14400, "Europe/Samara" },
{ "samst", 1, 18000, "Europe/Samara" },
{ "samt", 0, 18000, "Asia/Samarkand" },
{ "samt", 0, 14400, "Asia/Samarkand" },
{ "samt", 0, 10800, "Europe/Samara" },
{ "samt", 0, 14400, "Europe/Samara" },
{ "rmt", 0, 23080, "Asia/Yangon" },
{ "rmt", 0, 2996, "Europe/Rome" },
{ "rmt", 0, 2996, "Europe/San_Marino" },
{ "rmt", 0, 2996, "Europe/Vatican" },
{ "sast", 0, 7200, "Africa/Johannesburg" },
{ "sast", 1, 10800, "Africa/Johannesburg" },
{ "sast", 0, 5400, "Africa/Johannesburg" },
@ -1531,11 +1412,9 @@
{ "sct", 0, 14400, "Indian/Mahe" },
{ "sdmt", 0, -16800, "America/Santo_Domingo" },
{ "sdt", 1, -36000, "Pacific/Apia" },
{ "set", 0, 3614, "Europe/Stockholm" },
{ "sgt", 0, 28800, "Asia/Singapore" },
{ "sgt", 0, 27000, "Asia/Singapore" },
{ "shest", 1, 21600, "Asia/Aqtau" },
{ "shet", 0, 21600, "Asia/Aqtau" },
{ "shet", 0, 18000, "Asia/Aqtau" },
{ "sjmt", 0, -20173, "America/Costa_Rica" },
{ "smt", 0, -13884, "Atlantic/Stanley" },
{ "smt", 0, -16966, "America/Santiago" },
@ -1543,53 +1422,24 @@
{ "smt", 0, 24925, "Asia/Kuala_Lumpur" },
{ "smt", 0, 24925, "Asia/Singapore" },
{ "smt", 0, 8160, "Europe/Simferopol" },
{ "sret", 0, 39600, "Asia/Srednekolymsk" },
{ "srt", 0, -10800, "America/Paramaribo" },
{ "srt", 0, -12600, "America/Paramaribo" },
{ "sst", 0, -39600, "Pacific/Samoa" },
{ "sst", 0, -39600, "Pacific/Apia" },
{ "sst", 0, -39600, "Pacific/Midway" },
{ "sst", 0, -39600, "Pacific/Pago_Pago" },
{ "stat", 0, 10800, "Europe/Volgograd" },
{ "stat", 0, 14400, "Europe/Volgograd" },
{ "svest", 1, 21600, "Asia/Yekaterinburg" },
{ "svest", 1, 18000, "Asia/Yekaterinburg" },
{ "svet", 0, 18000, "Asia/Yekaterinburg" },
{ "svet", 0, 14400, "Asia/Yekaterinburg" },
{ "swat", 0, 5400, "Africa/Windhoek" },
{ "syot", 0, 10800, "Antarctica/Syowa" },
{ "taht", 0, -36000, "Pacific/Tahiti" },
{ "tasst", 1, 25200, "Asia/Samarkand" },
{ "tasst", 1, 21600, "Asia/Tashkent" },
{ "tasst", 1, 25200, "Asia/Tashkent" },
{ "tast", 0, 21600, "Asia/Samarkand" },
{ "tast", 0, 18000, "Asia/Tashkent" },
{ "tast", 0, 21600, "Asia/Tashkent" },
{ "tbist", 1, 18000, "Asia/Tbilisi" },
{ "tbist", 1, 14400, "Asia/Tbilisi" },
{ "tbit", 0, 14400, "Asia/Tbilisi" },
{ "tbit", 0, 10800, "Asia/Tbilisi" },
{ "tbmt", 0, 10751, "Asia/Tbilisi" },
{ "tft", 0, 18000, "Indian/Kerguelen" },
{ "tjt", 0, 18000, "Asia/Dushanbe" },
{ "tkt", 0, -39600, "Pacific/Fakaofo" },
{ "tkt", 0, 46800, "Pacific/Fakaofo" },
{ "tlt", 0, 32400, "Asia/Dili" },
{ "tlt", 0, 28800, "Asia/Dili" },
{ "tmt", 0, 12344, "Asia/Tehran" },
{ "tmt", 0, 5940, "Europe/Tallinn" },
{ "tmt", 0, 14400, "Asia/Ashgabat" },
{ "tmt", 0, 14400, "Asia/Ashkhabad" },
{ "tmt", 0, 18000, "Asia/Ashgabat" },
{ "tmt", 0, 18000, "Asia/Ashkhabad" },
{ "tost", 1, 50400, "Pacific/Tongatapu" },
{ "tot", 0, 46800, "Pacific/Tongatapu" },
{ "tot", 0, 44400, "Pacific/Tongatapu" },
{ "trst", 1, 14400, "Europe/Istanbul" },
{ "trst", 1, 14400, "Asia/Istanbul" },
{ "trt", 0, 10800, "Europe/Istanbul" },
{ "trt", 0, 10800, "Asia/Istanbul" },
{ "tsat", 0, 10800, "Europe/Volgograd" },
{ "tvt", 0, 43200, "Pacific/Funafuti" },
{ "uct", 0, 0, "Etc/UCT" },
{ "ulast", 1, 32400, "Asia/Ulaanbaatar" },
@ -1600,12 +1450,6 @@
{ "ulat", 0, 25200, "Asia/Ulan_Bator" },
{ "ulat", 0, 28800, "Asia/Choibalsan" },
{ "ulat", 0, 28800, "Asia/Ulan_Bator" },
{ "urast", 1, 21600, "Asia/Oral" },
{ "urast", 1, 18000, "Asia/Oral" },
{ "urat", 0, 21600, "Asia/Oral" },
{ "urat", 0, 14400, "Asia/Oral" },
{ "urat", 0, 18000, "Asia/Oral" },
{ "utc", 0, 0, "Antarctica/Troll" },
{ "utc", 0, 0, "Etc/Universal" },
{ "utc", 0, 0, "Etc/UTC" },
{ "utc", 0, 0, "Etc/Zulu" },
@ -1616,27 +1460,8 @@
{ "uyst", 1, -7200, "America/Montevideo" },
{ "uyt", 0, -10800, "America/Montevideo" },
{ "uyt", 0, -12600, "America/Montevideo" },
{ "uzst", 1, 21600, "Asia/Samarkand" },
{ "uzst", 1, 21600, "Asia/Tashkent" },
{ "uzt", 0, 18000, "Asia/Samarkand" },
{ "uzt", 0, 18000, "Asia/Tashkent" },
{ "vet", 0, -16200, "America/Caracas" },
{ "vet", 0, -14400, "America/Caracas" },
{ "vlast", 1, 39600, "Asia/Vladivostok" },
{ "vlast", 1, 36000, "Asia/Vladivostok" },
{ "vlast", 1, 39600, "Asia/Khandyga" },
{ "vlat", 0, 36000, "Asia/Vladivostok" },
{ "vlat", 0, 32400, "Asia/Vladivostok" },
{ "vlat", 0, 39600, "Asia/Vladivostok" },
{ "vlat", 0, 36000, "Asia/Khandyga" },
{ "vlat", 0, 36000, "Asia/Ust-Nera" },
{ "vlat", 0, 39600, "Asia/Khandyga" },
{ "vlat", 0, 39600, "Asia/Ust-Nera" },
{ "volst", 1, 14400, "Europe/Volgograd" },
{ "volst", 1, 18000, "Europe/Volgograd" },
{ "volt", 0, 10800, "Europe/Volgograd" },
{ "volt", 0, 14400, "Europe/Volgograd" },
{ "vost", 0, 21600, "Antarctica/Vostok" },
{ "vust", 1, 43200, "Pacific/Efate" },
{ "vut", 0, 39600, "Pacific/Efate" },
{ "wakt", 0, 43200, "Pacific/Wake" },
@ -1737,23 +1562,6 @@
{ "wsst", 0, 46800, "Pacific/Apia" },
{ "xjt", 0, 21600, "Asia/Kashgar" },
{ "xjt", 0, 21600, "Asia/Urumqi" },
{ "yakst", 1, 36000, "Asia/Yakutsk" },
{ "yakst", 1, 32400, "Asia/Yakutsk" },
{ "yakst", 1, 32400, "Asia/Chita" },
{ "yakst", 1, 32400, "Asia/Khandyga" },
{ "yakst", 1, 36000, "Asia/Chita" },
{ "yakst", 1, 36000, "Asia/Khandyga" },
{ "yakt", 0, 32400, "Asia/Yakutsk" },
{ "yakt", 0, 28800, "Asia/Yakutsk" },
{ "yakt", 0, 36000, "Asia/Yakutsk" },
{ "yakt", 0, 28800, "Asia/Chita" },
{ "yakt", 0, 28800, "Asia/Khandyga" },
{ "yakt", 0, 28800, "Asia/Ust-Nera" },
{ "yakt", 0, 32400, "Asia/Chita" },
{ "yakt", 0, 32400, "Asia/Khandyga" },
{ "yakt", 0, 32400, "Asia/Ust-Nera" },
{ "yakt", 0, 36000, "Asia/Chita" },
{ "yakt", 0, 36000, "Asia/Khandyga" },
{ "yddt", 1, -25200, "America/Dawson" },
{ "yddt", 1, -25200, "America/Whitehorse" },
{ "yddt", 1, -25200, "Canada/Yukon" },
@ -1762,13 +1570,6 @@
{ "ydt", 1, -28800, "America/Whitehorse" },
{ "ydt", 1, -28800, "America/Yakutat" },
{ "ydt", 1, -28800, "Canada/Yukon" },
{ "yekst", 1, 21600, "Asia/Yekaterinburg" },
{ "yekt", 0, 18000, "Asia/Yekaterinburg" },
{ "yekt", 0, 21600, "Asia/Yekaterinburg" },
{ "yerst", 1, 18000, "Asia/Yerevan" },
{ "yerst", 1, 14400, "Asia/Yerevan" },
{ "yert", 0, 14400, "Asia/Yerevan" },
{ "yert", 0, 10800, "Asia/Yerevan" },
{ "ypt", 1, -28800, "America/Dawson" },
{ "ypt", 1, -28800, "America/Whitehorse" },
{ "ypt", 1, -28800, "America/Yakutat" },
@ -1809,22 +1610,4 @@
{ "w", 0, -36000, NULL },
{ "x", 0, -39600, NULL },
{ "y", 0, -43200, NULL },
{ "zzz", 0, 0, "Antarctica/Davis" },
{ "zzz", 0, 0, "America/Cambridge_Bay" },
{ "zzz", 0, 0, "America/Inuvik" },
{ "zzz", 0, 0, "America/Iqaluit" },
{ "zzz", 0, 0, "America/Pangnirtung" },
{ "zzz", 0, 0, "America/Rankin_Inlet" },
{ "zzz", 0, 0, "America/Resolute" },
{ "zzz", 0, 0, "America/Yellowknife" },
{ "zzz", 0, 0, "Antarctica/Casey" },
{ "zzz", 0, 0, "Antarctica/DumontDUrville" },
{ "zzz", 0, 0, "Antarctica/Macquarie" },
{ "zzz", 0, 0, "Antarctica/Mawson" },
{ "zzz", 0, 0, "Antarctica/Palmer" },
{ "zzz", 0, 0, "Antarctica/Rothera" },
{ "zzz", 0, 0, "Antarctica/Syowa" },
{ "zzz", 0, 0, "Antarctica/Troll" },
{ "zzz", 0, 0, "Antarctica/Vostok" },
{ "zzz", 0, 0, "Indian/Kerguelen" },
{ "z", 0, 0, NULL },

View File

@ -32,6 +32,18 @@ static int month_tab[12] = { 0, 31, 59, 90, 120, 151, 181, 212, 24
static int days_in_month_leap[13] = { 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static int days_in_month[13] = { 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static void do_range_limit_fraction(double *fraction, timelib_sll *seconds)
{
if (*fraction < 0) {
*fraction += 1;
*seconds -= 1;
}
if (*fraction > 1) {
*fraction -= 1;
*seconds += 1;
}
}
static void do_range_limit(timelib_sll start, timelib_sll end, timelib_sll adj, timelib_sll *a, timelib_sll *b)
{
if (*a < start) {
@ -192,6 +204,7 @@ void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt)
void timelib_do_normalize(timelib_time* time)
{
if (time->s != TIMELIB_UNSET) do_range_limit_fraction(&time->f, &time->s);
if (time->s != TIMELIB_UNSET) do_range_limit(0, 60, 60, &time->s, &time->i);
if (time->s != TIMELIB_UNSET) do_range_limit(0, 60, 60, &time->i, &time->h);
if (time->s != TIMELIB_UNSET) do_range_limit(0, 24, 24, &time->h, &time->d);
@ -209,6 +222,8 @@ static void do_adjust_relative(timelib_time* time)
timelib_do_normalize(time);
if (time->have_relative) {
time->f += time->relative.f;
time->s += time->relative.s;
time->i += time->relative.i;
time->h += time->relative.h;

View File

@ -294,3 +294,10 @@ int timelib_apply_localtime(timelib_time *t, unsigned int localtime)
}
return 0;
}
#if HAVE_GETTIMEOFDAY
void timelib_set_fraction_from_timeval(timelib_time *t, struct timeval tp)
{
t->f = (double) tp.tv_usec / 1000000;
}
#endif

View File

@ -253,12 +253,14 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_date_time_set, 0, 0, 3)
ZEND_ARG_INFO(0, hour)
ZEND_ARG_INFO(0, minute)
ZEND_ARG_INFO(0, second)
ZEND_ARG_INFO(0, microseconds)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_time_set, 0, 0, 2)
ZEND_ARG_INFO(0, hour)
ZEND_ARG_INFO(0, minute)
ZEND_ARG_INFO(0, second)
ZEND_ARG_INFO(0, microseconds)
ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO_EX(arginfo_date_date_set, 0, 0, 4)
@ -2370,6 +2372,8 @@ static HashTable *date_object_get_properties_interval(zval *object) /* {{{ */
PHP_DATE_INTERVAL_ADD_PROPERTY("h", h);
PHP_DATE_INTERVAL_ADD_PROPERTY("i", i);
PHP_DATE_INTERVAL_ADD_PROPERTY("s", s);
ZVAL_DOUBLE(&zv, (double)intervalobj->diff->f);
zend_hash_str_update(props, "f", sizeof("f") - 1, &zv);
PHP_DATE_INTERVAL_ADD_PROPERTY("weekday", weekday);
PHP_DATE_INTERVAL_ADD_PROPERTY("weekday_behavior", weekday_behavior);
PHP_DATE_INTERVAL_ADD_PROPERTY("first_last_day_of", first_last_day_of);
@ -2487,6 +2491,23 @@ static void update_errors_warnings(timelib_error_container *last_errors) /* {{{
DATEG(last_errors) = last_errors;
} /* }}} */
static void php_date_set_time_fraction(timelib_time *time, int microseconds)
{
time->f = microseconds / 1000000;
}
static void php_date_set_current_time_fraction(timelib_time *time)
{
#if HAVE_GETTIMEOFDAY
struct timeval tp = {0}; /* For setting microseconds */
gettimeofday(&tp, NULL);
timelib_set_fraction_from_timeval(time, tp);
#else
time->f = 0;
#endif
}
PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, int ctor) /* {{{ */
{
timelib_time *now;
@ -2560,7 +2581,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str,
break;
}
timelib_unixtime2local(now, (timelib_sll) time(NULL));
php_date_set_current_time_fraction(now);
timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE);
timelib_update_ts(dateobj->time, tzi);
timelib_update_from_sse(dateobj->time);
@ -3056,6 +3077,11 @@ static int php_date_modify(zval *object, char *modify, size_t modify_len) /* {{{
dateobj->time->s = 0;
}
}
if (tmp_time->f != -99999) {
dateobj->time->f = tmp_time->f;
}
timelib_time_dtor(tmp_time);
timelib_update_ts(dateobj->time, NULL);
@ -3355,7 +3381,7 @@ PHP_FUNCTION(date_offset_get)
}
/* }}} */
static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long s, zval *return_value) /* {{{ */
static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long s, zend_long ms, zval *return_value) /* {{{ */
{
php_date_obj *dateobj;
@ -3364,22 +3390,23 @@ static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long
dateobj->time->h = h;
dateobj->time->i = i;
dateobj->time->s = s;
dateobj->time->f = ((double) ms) / 1000000;
timelib_update_ts(dateobj->time, NULL);
} /* }}} */
/* {{{ proto DateTime date_time_set(DateTime object, long hour, long minute[, long second])
/* {{{ proto DateTime date_time_set(DateTime object, long hour, long minute[, long second[, long microseconds]])
Sets the time.
*/
PHP_FUNCTION(date_time_set)
{
zval *object;
zend_long h, i, s = 0;
zend_long h, i, s = 0, ms = 0;
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|l", &object, date_ce_date, &h, &i, &s) == FAILURE) {
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|ll", &object, date_ce_date, &h, &i, &s, &ms) == FAILURE) {
RETURN_FALSE;
}
php_date_time_set(object, h, i, s, return_value);
php_date_time_set(object, h, i, s, ms, return_value);
Z_ADDREF_P(object);
ZVAL_COPY_VALUE(return_value, object);
@ -3391,14 +3418,14 @@ PHP_FUNCTION(date_time_set)
PHP_METHOD(DateTimeImmutable, setTime)
{
zval *object, new_object;
zend_long h, i, s = 0;
zend_long h, i, s = 0, ms = 0;
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|l", &object, date_ce_immutable, &h, &i, &s) == FAILURE) {
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "Oll|ll", &object, date_ce_immutable, &h, &i, &s, &ms) == FAILURE) {
RETURN_FALSE;
}
date_clone_immutable(object, &new_object);
php_date_time_set(&new_object, h, i, s, return_value);
php_date_time_set(&new_object, h, i, s, ms, return_value);
ZVAL_OBJ(return_value, Z_OBJ(new_object));
}
@ -3514,6 +3541,7 @@ static void php_date_timestamp_set(zval *object, zend_long timestamp, zval *retu
DATE_CHECK_INITIALIZED(dateobj->time, DateTime);
timelib_unixtime2local(dateobj->time, (timelib_sll)timestamp);
timelib_update_ts(dateobj->time, NULL);
php_date_set_time_fraction(dateobj->time, 0);
} /* }}} */
/* {{{ proto DateTime date_timestamp_set(DateTime object, long unixTimestamp)
@ -3979,6 +4007,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c
zval *retval;
zval tmp_member;
timelib_sll value = -1;
double fvalue = -1;
if (Z_TYPE_P(member) != IS_STRING) {
tmp_member = *member;
@ -4010,6 +4039,10 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c
GET_VALUE_FROM_STRUCT(h, "h");
GET_VALUE_FROM_STRUCT(i, "i");
GET_VALUE_FROM_STRUCT(s, "s");
if (strcmp(Z_STRVAL_P(member), "f") == 0) {
fvalue = obj->diff->f;
break;
}
GET_VALUE_FROM_STRUCT(invert, "invert");
GET_VALUE_FROM_STRUCT(days, "days");
/* didn't find any */
@ -4024,7 +4057,9 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c
retval = rv;
if (value != -99999) {
if (fvalue != -1) {
ZVAL_DOUBLE(retval, fvalue);
} else if (value != -99999) {
ZVAL_LONG(retval, value);
} else {
ZVAL_FALSE(retval);
@ -4075,6 +4110,10 @@ void date_interval_write_property(zval *object, zval *member, zval *value, void
SET_VALUE_FROM_STRUCT(h, "h");
SET_VALUE_FROM_STRUCT(i, "i");
SET_VALUE_FROM_STRUCT(s, "s");
if (strcmp(Z_STRVAL_P(member), "f") == 0) {
obj->diff->f = zval_get_double(value);
break;
}
SET_VALUE_FROM_STRUCT(invert, "invert");
/* didn't find any */
(zend_get_std_object_handlers())->write_property(object, member, value, cache_slot);
@ -4139,12 +4178,23 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter
} \
} while (0);
#define PHP_DATE_INTERVAL_READ_PROPERTY_DOUBLE(element, member, def) \
do { \
zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \
if (z_arg) { \
(*intobj)->diff->member = (double)zval_get_double(z_arg); \
} else { \
(*intobj)->diff->member = (double)def; \
} \
} while (0);
PHP_DATE_INTERVAL_READ_PROPERTY("y", y, timelib_sll, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("m", m, timelib_sll, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("d", d, timelib_sll, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("h", h, timelib_sll, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("i", i, timelib_sll, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("s", s, timelib_sll, -1)
PHP_DATE_INTERVAL_READ_PROPERTY_DOUBLE("f", f, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("weekday", weekday, int, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("weekday_behavior", weekday_behavior, int, -1)
PHP_DATE_INTERVAL_READ_PROPERTY("first_last_day_of", first_last_day_of, int, -1)
@ -4254,6 +4304,9 @@ static zend_string *date_interval_format(char *format, size_t format_len, timeli
case 'S': length = slprintf(buffer, 32, "%02" ZEND_LONG_FMT_SPEC, (zend_long) t->s); break;
case 's': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) t->s); break;
case 'F': length = slprintf(buffer, 32, "%06" ZEND_LONG_FMT_SPEC, (zend_long) (t->f * 1000000)); break;
case 'f': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) (t->f * 1000000)); break;
case 'a': {
if ((int) t->days != -99999) {
length = slprintf(buffer, 32, "%d", (int) t->days);

View File

@ -8,17 +8,8 @@ date_default_timezone_set('UTC');
echo "Done\n";
?>
--EXPECTF--
array(6) {
array(5) {
[0]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(0)
["timezone_id"]=>
string(16) "Antarctica/Troll"
}
[1]=>
array(3) {
["dst"]=>
bool(false)
@ -27,7 +18,7 @@ array(6) {
["timezone_id"]=>
string(13) "Etc/Universal"
}
[2]=>
[1]=>
array(3) {
["dst"]=>
bool(false)
@ -36,7 +27,7 @@ array(6) {
["timezone_id"]=>
string(7) "Etc/UTC"
}
[3]=>
[2]=>
array(3) {
["dst"]=>
bool(false)
@ -45,6 +36,15 @@ array(6) {
["timezone_id"]=>
string(8) "Etc/Zulu"
}
[3]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(0)
["timezone_id"]=>
string(3) "UTC"
}
[4]=>
array(3) {
["dst"]=>
@ -54,14 +54,5 @@ array(6) {
["timezone_id"]=>
string(3) "UTC"
}
[5]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(0)
["timezone_id"]=>
string(3) "UTC"
}
}
Done

View File

@ -1,6 +1,5 @@
--TEST--
DateTimeZone::getLocation -- timezone_location_get — Returns location information for a timezone
public array DateTimeZone::getLocation ( void ) ;
DateTimeZone::getLocation -- timezone_location_get — Returns location information for a timezone public array DateTimeZone::getLocation ( void ) ;
--CREDITS--
marcosptf - <marcosptf@yahoo.com.br> - #phparty7 - @phpsp - novatec/2015 - sao paulo - br
--SKIPIF--
@ -66,17 +65,3 @@ Array
[longitude] => %f
[comments] => %s
)
Array
(
[country_code] => %s
[latitude] => %f
[longitude] => %f
[comments] => %s
)
Array
(
[country_code] => %s
[latitude] => %f
[longitude] => %f
[comments] =>
)

View File

@ -29,7 +29,7 @@ string(5) "array"
int(%d)
-- Format a sample entry --
array(11) {
array(17) {
[0]=>
array(3) {
["dst"]=>
@ -44,18 +44,18 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(18) "Australia/Adelaide"
}
[2]=>
array(3) {
["dst"]=>
bool(true)
bool(false)
["offset"]=>
int(-14400)
int(34200)
["timezone_id"]=>
string(16) "America/Eirunepe"
string(18) "Australia/Adelaide"
}
[3]=>
array(3) {
@ -64,7 +64,7 @@ array(11) {
["offset"]=>
int(-14400)
["timezone_id"]=>
string(18) "America/Rio_Branco"
string(16) "America/Eirunepe"
}
[4]=>
array(3) {
@ -73,23 +73,23 @@ array(11) {
["offset"]=>
int(-14400)
["timezone_id"]=>
string(11) "Brazil/Acre"
string(18) "America/Rio_Branco"
}
[5]=>
array(3) {
["dst"]=>
bool(false)
bool(true)
["offset"]=>
int(34200)
int(-14400)
["timezone_id"]=>
string(13) "Asia/Jayapura"
string(11) "Brazil/Acre"
}
[6]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(21) "Australia/Broken_Hill"
}
@ -98,7 +98,7 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(16) "Australia/Darwin"
}
@ -107,7 +107,7 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(15) "Australia/North"
}
@ -116,11 +116,65 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(15) "Australia/South"
}
[10]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(32400)
["timezone_id"]=>
string(20) "Australia/Yancowinna"
}
[11]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(13) "Asia/Jayapura"
}
[12]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(21) "Australia/Broken_Hill"
}
[13]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(16) "Australia/Darwin"
}
[14]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(15) "Australia/North"
}
[15]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(15) "Australia/South"
}
[16]=>
array(3) {
["dst"]=>
bool(false)

View File

@ -25,7 +25,8 @@ echo "\n-- Testing DateTime::setTime() function with more than expected no. of a
$min = 15;
$sec = 30;
$extra_arg = 10;
var_dump( $datetime->setTime($hour, $min, $sec, $extra_arg) );
$microseconds = 123123;
var_dump( $datetime->setTime($hour, $min, $sec, $microseconds, $extra_arg) );
?>
===DONE===
@ -44,6 +45,6 @@ bool(false)
-- Testing DateTime::setTime() function with more than expected no. of arguments --
Warning: DateTime::setTime() expects at most 3 parameters, 4 given in %s on line %d
Warning: DateTime::setTime() expects at most 4 parameters, 5 given in %s on line %d
bool(false)
===DONE===

View File

@ -12,7 +12,7 @@ $diff = date_diff($date, $other);
var_dump($diff);
--EXPECTF--
object(DateInterval)#%d (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -25,6 +25,8 @@ object(DateInterval)#%d (15) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -15,6 +15,7 @@ DateInterval Object
[h] => 12
[i] => 30
[s] => 5
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0
@ -33,6 +34,7 @@ DateInterval Object
[h] => 12
[i] => 30
[s] => 5
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0

View File

@ -17,6 +17,7 @@ DateInterval Object
[h] => 4
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0

View File

@ -7,8 +7,8 @@ var_dump($i);
echo $i->format("%d"), "\n";
echo $i->format("%a"), "\n";
?>
--EXPECT--
object(DateInterval)#1 (15) {
--EXPECTF--
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -21,6 +21,8 @@ object(DateInterval)#1 (15) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -23,6 +23,7 @@ $unser = DateInterval::__set_state(array(
'h' => 4,
'i' => 3,
's' => 2,
'f' => 0.876543,
'invert' => 1,
'days' => 2400,
));
@ -32,7 +33,7 @@ var_dump($unser, $p);
?>
--EXPECT--
object(DateInterval)#3 (15) {
object(DateInterval)#3 (16) {
["y"]=>
int(0)
["m"]=>
@ -45,6 +46,8 @@ object(DateInterval)#3 (15) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -64,7 +67,7 @@ object(DateInterval)#3 (15) {
["have_special_relative"]=>
int(0)
}
string(320) "O:12:"DateInterval":15:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h";i:4;s:1:"i";i:0;s:1:"s";i:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";i:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}"
string(332) "O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:0;s:1:"h";i:4;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";i:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}"
DateInterval::__set_state(array(
'y' => 0,
'm' => 0,
@ -72,6 +75,7 @@ DateInterval::__set_state(array(
'h' => 4,
'i' => 0,
's' => 0,
'f' => 0.0,
'weekday' => 0,
'weekday_behavior' => 0,
'first_last_day_of' => 0,
@ -81,7 +85,7 @@ DateInterval::__set_state(array(
'special_amount' => 0,
'have_weekday_relative' => 0,
'have_special_relative' => 0,
))object(DateInterval)#5 (15) {
))object(DateInterval)#5 (16) {
["y"]=>
int(0)
["m"]=>
@ -94,6 +98,8 @@ DateInterval::__set_state(array(
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -128,7 +134,7 @@ object(DatePeriod)#6 (6) {
["end"]=>
NULL
["interval"]=>
object(DateInterval)#7 (15) {
object(DateInterval)#7 (16) {
["y"]=>
int(0)
["m"]=>
@ -141,6 +147,8 @@ object(DatePeriod)#6 (6) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -165,7 +173,7 @@ object(DatePeriod)#6 (6) {
["include_start_date"]=>
bool(true)
}
object(DateInterval)#8 (15) {
object(DateInterval)#8 (16) {
["y"]=>
int(7)
["m"]=>
@ -178,6 +186,8 @@ object(DateInterval)#8 (15) {
int(3)
["s"]=>
int(2)
["f"]=>
float(0.876543)
["weekday"]=>
int(-1)
["weekday_behavior"]=>
@ -212,7 +222,7 @@ object(DatePeriod)#9 (6) {
["end"]=>
NULL
["interval"]=>
object(DateInterval)#7 (15) {
object(DateInterval)#7 (16) {
["y"]=>
int(0)
["m"]=>
@ -225,6 +235,8 @@ object(DatePeriod)#9 (6) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -27,6 +27,7 @@ di Object
[h] => 0
[i] => 0
[s] => 0
[f] => 0
[weekday] => 0
[weekday_behavior] => 0
[first_last_day_of] => 0

View File

@ -25,7 +25,7 @@ foreach($intervals as $iv) {
echo "==DONE==\n";
?>
--EXPECTF--
object(DateInterval)#%d (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(1)
["m"]=>
@ -38,6 +38,8 @@ object(DateInterval)#%d (15) {
int(30)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -57,7 +59,7 @@ object(DateInterval)#%d (15) {
["have_special_relative"]=>
int(0)
}
object(DateInterval)#%d (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -70,6 +72,8 @@ object(DateInterval)#%d (15) {
int(30)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -89,7 +93,7 @@ object(DateInterval)#%d (15) {
["have_special_relative"]=>
int(0)
}
object(DateInterval)#%d (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -102,6 +106,8 @@ object(DateInterval)#%d (15) {
int(30)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -51,7 +51,7 @@ object(DatePeriod)#1 (6) {
["end"]=>
NULL
["interval"]=>
object(DateInterval)#5 (15) {
object(DateInterval)#5 (16) {
["y"]=>
int(0)
["m"]=>
@ -64,6 +64,8 @@ object(DatePeriod)#1 (6) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -110,7 +112,7 @@ object(DatePeriod)#5 (6) {
["end"]=>
NULL
["interval"]=>
object(DateInterval)#8 (15) {
object(DateInterval)#8 (16) {
["y"]=>
int(0)
["m"]=>
@ -123,6 +125,8 @@ object(DatePeriod)#5 (6) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -13,7 +13,7 @@ var_dump($di0, $di1);
?>
==DONE==
--EXPECT--
object(DateInterval)#1 (15) {
object(DateInterval)#1 (16) {
["y"]=>
int(2)
["m"]=>
@ -26,6 +26,8 @@ object(DateInterval)#1 (15) {
int(8)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -45,7 +47,7 @@ object(DateInterval)#1 (15) {
["have_special_relative"]=>
int(0)
}
object(DateInterval)#2 (15) {
object(DateInterval)#2 (16) {
["y"]=>
int(2)
["m"]=>
@ -58,6 +60,8 @@ object(DateInterval)#2 (15) {
int(8)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -15,13 +15,14 @@ var_dump($df,
$df->h,
$df->i,
$df->s,
$df->f,
$df->invert,
$df->days);
?>
==DONE==
--EXPECTF--
object(DateInterval)#%d (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -34,6 +35,8 @@ object(DateInterval)#%d (15) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -59,6 +62,7 @@ int(2)
int(0)
int(0)
int(0)
float(0)
int(0)
int(2)
==DONE==

View File

@ -12,7 +12,7 @@ var_dump($di);
?>
==DONE==
--EXPECTF--
object(DateInterval)#%d (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(2)
["m"]=>
@ -43,5 +43,7 @@ object(DateInterval)#%d (15) {
int(9)
["have_special_relative"]=>
int(0)
["f"]=>
float(-1)
}
==DONE==

View File

@ -0,0 +1,49 @@
--TEST--
Bug #53437 DateInterval unserialize bad data, 64 bit
--SKIPIF--
<?php if (PHP_INT_SIZE != 8) { die('skip true 64 bit only'); } ?>
--FILE--
<?php
$s = 'O:12:"DateInterval":16:{s:1:"y";s:1:"2";s:1:"m";s:1:"0";s:1:"d";s:3:"bla";s:1:"h";s:1:"6";s:1:"i";s:1:"8";s:1:"s";s:1:"0";s:1:"f";d:0.123654;s:7:"weekday";i:10;s:16:"weekday_behavior";i:10;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";s:4:"aoeu";s:12:"special_type";i:0;s:14:"special_amount";s:21:"234523452345234532455";s:21:"have_weekday_relative";i:21474836489;s:21:"have_special_relative";s:3:"bla";}';
$di = unserialize($s);
var_dump($di);
?>
==DONE==
--EXPECTF--
object(DateInterval)#%d (16) {
["y"]=>
int(2)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(6)
["i"]=>
int(8)
["s"]=>
int(0)
["f"]=>
float(0.123654)
["weekday"]=>
int(10)
["weekday_behavior"]=>
int(10)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
int(0)
["special_type"]=>
int(0)
["special_amount"]=>
int(9223372036854775807)
["have_weekday_relative"]=>
int(9)
["have_special_relative"]=>
int(0)
}
==DONE==

View File

@ -21,6 +21,8 @@ object(DateInterval)#1 (%d) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -11,7 +11,7 @@ var_dump($start);
var_dump($end);
var_dump($int);
?>
--EXPECT--
--EXPECTF--
object(DateTime)#1 (3) {
["date"]=>
string(26) "2010-10-04 02:18:48.000000"
@ -28,7 +28,7 @@ object(DateTime)#2 (3) {
["timezone"]=>
string(3) "EDT"
}
object(DateInterval)#3 (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -41,6 +41,8 @@ object(DateInterval)#3 (15) {
int(19)
["s"]=>
int(40)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>

View File

@ -8,7 +8,7 @@ $i = date_interval_create_from_date_string(null); //returns a empty object
var_dump($i);
?>
--EXPECTF--
object(DateInterval)#1 (15) {
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
@ -21,6 +21,8 @@ object(DateInterval)#1 (15) {
int(0)
["s"]=>
int(0)
["f"]=>
float(0)
["weekday"]=>
int(0)
["weekday_behavior"]=>
@ -39,4 +41,4 @@ object(DateInterval)#1 (15) {
int(0)
["have_special_relative"]=>
int(0)
}
}

View File

@ -1,9 +1,8 @@
--TEST--
Test date_interval_create_from_date_string() function : with 2 parameters (wrong).
Rodrigo Prado de Jesus <royopa [at] gmail [dot] com>
--FILE--
<?php
$i = date_interval_create_from_date_string('1 year', 'wrong');
?>
--EXPECTF--
Warning: date_interval_create_from_date_string() expects exactly 1 parameter, 2 given in %s on line %d
Warning: date_interval_create_from_date_string() expects exactly 1 parameter, 2 given in %s on line %d

View File

@ -0,0 +1,99 @@
--TEST--
Fractions with DateTime objects
--INI--
date.timezone=UTC
--FILE--
<?php
/* This will go wrong, once in a million times */
$ms = date_create()->format('u');
echo ($ms = 0) ? "microseconds = false\n" : "microseconds = true\n";
/* Normal creation */
echo date_create( "2016-10-03 12:47:18.819313" )->format( "Y-m-d H:i:s.u" ), "\n\n";
/* With modifications */
$dt = new DateTimeImmutable( "2016-10-03 12:47:18.819210" );
echo $dt->modify( "+1 day" )->format( "Y-m-d H:i:s.u" ), "\n";
$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
echo $dt->modify( "-3 months" )->format( "Y-m-d H:i:s.u" ), "\n";
echo "\n";
/* These should reset the time (and hence fraction) to 0 */
$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
echo $dt->modify( "yesterday" )->format( "Y-m-d H:i:s.u" ), "\n";
$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
echo $dt->modify( "noon" )->format( "Y-m-d H:i:s.u" ), "\n";
$dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
echo $dt->modify( "10 weekday" )->format( "Y-m-d H:i:s.u" ), "\n";
/* Interval containing fractions */
$dt1 = new DateTimeImmutable( "2016-10-03 13:20:07.103123" );
$dt2 = new DateTimeImmutable( "2016-10-03 13:20:07.481312" );
$diff = $dt1->diff( $dt2 );
var_dump( $diff );
$dt0 = $dt1->sub( $diff );
$dt3 = $dt2->add( $diff );
$dt4 = $dt3->add( $diff );
echo $dt0->format( "Y-m-d H:i:s.u" ), "\n";
echo $dt1->format( "Y-m-d H:i:s.u" ), "\n";
echo $dt2->format( "Y-m-d H:i:s.u" ), "\n";
echo $dt3->format( "Y-m-d H:i:s.u" ), "\n";
echo $dt4->format( "Y-m-d H:i:s.u" ), "\n";
?>
--EXPECTF--
microseconds = true
2016-10-03 12:47:18.819313
2016-10-04 12:47:18.819210
2016-07-03 12:47:18.081921
2016-10-02 00:00:00.000000
2016-10-03 12:00:00.000000
2016-10-17 00:00:00.000000
object(DateInterval)#%d (16) {
["y"]=>
int(0)
["m"]=>
int(0)
["d"]=>
int(0)
["h"]=>
int(0)
["i"]=>
int(0)
["s"]=>
int(0)
["f"]=>
float(0.378189)
["weekday"]=>
int(0)
["weekday_behavior"]=>
int(0)
["first_last_day_of"]=>
int(0)
["invert"]=>
int(0)
["days"]=>
int(0)
["special_type"]=>
int(0)
["special_amount"]=>
int(0)
["have_weekday_relative"]=>
int(0)
["have_special_relative"]=>
int(0)
}
2016-10-03 13:20:06.724934
2016-10-03 13:20:07.103123
2016-10-03 13:20:07.481312
2016-10-03 13:20:07.859501
2016-10-03 13:20:08.237690

View File

@ -0,0 +1,29 @@
--TEST--
Fractions with DateTime objects (create_from_format)
--INI--
date.timezone=UTC
--FILE--
<?php
$dt = date_create_from_format( "Y-m-d H:i:s.u", "2016-10-03 12:47:18.819313" );
var_dump( $dt );
$dt = date_create_from_format( "U.u", "1475500799.176312" );
var_dump( $dt );
?>
--EXPECTF--
object(DateTime)#%d (%d) {
["date"]=>
string(26) "2016-10-03 12:47:18.819313"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
object(DateTime)#%d (%d) {
["date"]=>
string(26) "2016-10-03 13:19:59.176312"
["timezone_type"]=>
int(1)
["timezone"]=>
string(6) "+00:00"
}

View File

@ -0,0 +1,25 @@
--TEST--
Fractions with DateTime objects (Serialization)
--INI--
date.timezone=UTC
--FILE--
<?php
/* Normal creation */
$dt = date_create( "2016-10-03 12:47:18.819313" );
$s = serialize( $dt );
echo $s, "\n";
$u = unserialize( $s );
var_dump( $u );
?>
--EXPECTF--
O:8:"DateTime":3:{s:4:"date";s:26:"2016-10-03 12:47:18.819313";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}
object(DateTime)#2 (%d) {
["date"]=>
string(26) "2016-10-03 12:47:18.819313"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}

View File

@ -24,8 +24,9 @@ var_dump( date_time_set($datetime, $hour) );
echo "\n-- Testing date_time_set() function with more than expected no. of arguments --\n";
$min = 15;
$sec = 30;
$microseconds = 123123;
$extra_arg = 10;
var_dump( date_time_set($datetime, $hour, $min, $sec, $extra_arg) );
var_dump( date_time_set($datetime, $hour, $min, $sec, $microseconds, $extra_arg) );
echo "\n-- Testing date_time_set() function with an invalid values for \$object argument --\n";
$invalid_obj = new stdClass();
@ -54,7 +55,7 @@ bool(false)
-- Testing date_time_set() function with more than expected no. of arguments --
Warning: date_time_set() expects at most 4 parameters, 5 given in %s on line %d
Warning: date_time_set() expects at most 5 parameters, 6 given in %s on line %d
bool(false)
-- Testing date_time_set() function with an invalid values for $object argument --

View File

@ -29,7 +29,7 @@ string(5) "array"
int(%d)
-- Format a sample entry --
array(11) {
array(17) {
[0]=>
array(3) {
["dst"]=>
@ -44,18 +44,18 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(18) "Australia/Adelaide"
}
[2]=>
array(3) {
["dst"]=>
bool(true)
bool(false)
["offset"]=>
int(-14400)
int(34200)
["timezone_id"]=>
string(16) "America/Eirunepe"
string(18) "Australia/Adelaide"
}
[3]=>
array(3) {
@ -64,7 +64,7 @@ array(11) {
["offset"]=>
int(-14400)
["timezone_id"]=>
string(18) "America/Rio_Branco"
string(16) "America/Eirunepe"
}
[4]=>
array(3) {
@ -73,23 +73,23 @@ array(11) {
["offset"]=>
int(-14400)
["timezone_id"]=>
string(11) "Brazil/Acre"
string(18) "America/Rio_Branco"
}
[5]=>
array(3) {
["dst"]=>
bool(false)
bool(true)
["offset"]=>
int(34200)
int(-14400)
["timezone_id"]=>
string(13) "Asia/Jayapura"
string(11) "Brazil/Acre"
}
[6]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(21) "Australia/Broken_Hill"
}
@ -98,7 +98,7 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(16) "Australia/Darwin"
}
@ -107,7 +107,7 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(15) "Australia/North"
}
@ -116,11 +116,65 @@ array(11) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
int(32400)
["timezone_id"]=>
string(15) "Australia/South"
}
[10]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(32400)
["timezone_id"]=>
string(20) "Australia/Yancowinna"
}
[11]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(13) "Asia/Jayapura"
}
[12]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(21) "Australia/Broken_Hill"
}
[13]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(16) "Australia/Darwin"
}
[14]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(15) "Australia/North"
}
[15]=>
array(3) {
["dst"]=>
bool(false)
["offset"]=>
int(34200)
["timezone_id"]=>
string(15) "Australia/South"
}
[16]=>
array(3) {
["dst"]=>
bool(false)

View File

@ -24,11 +24,7 @@ var_dump( timezone_name_from_abbr("EDT") );
echo "-- Lookup with name and offset--\n";
var_dump( timezone_name_from_abbr("ADT", -10800) );
var_dump( timezone_name_from_abbr("ADT", 14400) );
var_dump( timezone_name_from_abbr("AKTT", 14400) );
var_dump( timezone_name_from_abbr("aktt", 18000) );
var_dump( timezone_name_from_abbr("Aktt", 21600) );
var_dump( timezone_name_from_abbr("AMST", -10800) );
var_dump( timezone_name_from_abbr("amst", 180000) );
echo "-- Tests without valid name - uses gmtOffset and isdst to find match --\n";
var_dump( timezone_name_from_abbr("", 3600, 1) );
@ -52,11 +48,7 @@ string(16) "America/New_York"
-- Lookup with name and offset--
string(15) "America/Halifax"
string(12) "Asia/Baghdad"
string(11) "Asia/Aqtobe"
string(11) "Asia/Aqtobe"
string(11) "Asia/Aqtobe"
string(17) "America/Boa_Vista"
string(12) "Asia/Yerevan"
-- Tests without valid name - uses gmtOffset and isdst to find match --
string(13) "Europe/London"
string(17) "America/Sao_Paulo"
@ -65,4 +57,4 @@ string(15) "America/Halifax"
-- Tests with invalid offsets --
bool(false)
bool(false)
===DONE===
===DONE===

View File

@ -14,7 +14,7 @@ object(ArrayObject)#1 (2) {
[0]=>
int(0)
["storage":"ArrayObject":private]=>
object(DateInterval)#2 (15) {
object(DateInterval)#2 (16) {
["y"]=>
int(3)
["m"]=>
@ -27,6 +27,8 @@ object(ArrayObject)#1 (2) {
int(-1)
["s"]=>
int(-1)
["f"]=>
float(-1)
["weekday"]=>
int(-1)
["weekday_behavior"]=>