36#define TIMELIB_LLABS(y) (y < 0 ? (y * -1) : y)
40 "Cannot allocate buffer for parsing",
41 "Corrupt tzfile: The transitions in the file don't always increase",
42 "Corrupt tzfile: The expected 64-bit preamble is missing",
43 "Corrupt tzfile: No abbreviation could be found for a transition",
44 "The version used in this timezone identifier is unsupported",
45 "No timezone with this name could be found",
46 "A 'slim' timezone file has been detected",
47 "The embedded POSIX string is not valid",
48 "The embedded POSIX string is empty"
58 return "Unknown error code";
77 if (
t1->sse ==
t2->sse) {
78 if (
t1->us ==
t2->us) {
82 return (
t1->us <
t2->us) ? -1 : 1;
85 return (
t1->sse <
t2->sse) ? -1 : 1;
124 size_t tz_abbr_len =
strlen(tz_abbr);
128 for (i = 0; i < tz_abbr_len; i++) {
129 tm->
tz_abbr[i] = toupper(tz_abbr[i]);
199 seconds =
floor((h - *hour) * 3600);
212 *h = ((double)hour + (double)
min / 60 + (double)sec / 3600);
214 *h = ((double)hour - (double)
min / 60 - (double)sec / 3600);
232static const unsigned char timelib_tolower_map[256] = {
233 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
234 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
235 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
236 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
237 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
238 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
239 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
240 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
241 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
242 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
243 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
244 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
245 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
246 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
247 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
248 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
251#define timelib_tolower(c) (timelib_tolower_map[(unsigned char)(c)])
254#define MAX(a, b) (((a)>(b))?(a):(b))
255#define MIN(a, b) (((a)<(b))?(a):(b))
277 return (
int)(len1 - len2);
299 return (
int)(
MIN(length, len1) -
MIN(length, len2));
310 printf(
"TS: %lld | %s%04lld-%02lld-%02lld %02lld:%02lld:%02lld",
319 printf(
" GMT %05d%s", d->
z, d->
dst == 1 ?
" (DST)" :
"");
333 printf(
" %05d%s", d->
z, d->
dst == 1 ?
" (DST)" :
"");
340 printf(
"%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS",
348 printf(
" / first day of");
364 printf(
" / x y of z month");
367 printf(
" / last y of z month");
378 printf(
"%3lldY %3lldM %3lldD / %3lldH %3lldM %3lldS (days: %lld)%s",
383 printf(
" / first day of");
printf(string $format, mixed ... $values)
PHP_JSON_API size_t int options
php_json_error_code error_code
timelib_error_message * error_messages
timelib_error_message * warning_messages
struct _timelib_rel_time::@101250100307152364107271232245320174113050270325 special
unsigned int have_special_relative
unsigned int have_weekday_relative
unsigned int is_localtime
unsigned int sse_uptodate
unsigned int have_relative
timelib_rel_time relative
void timelib_time_offset_dtor(timelib_time_offset *t)
void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec)
timelib_time * timelib_time_ctor(void)
timelib_long timelib_date_to_int(timelib_time *d, int *error)
timelib_time * timelib_time_clone(timelib_time *orig)
#define timelib_tolower(c)
const char * timelib_get_error_message(int error_code)
void timelib_hmsf_to_decimal_hour(int hour, int min, int sec, int us, double *h)
int timelib_time_compare(timelib_time *t1, timelib_time *t2)
int timelib_strncasecmp(const char *s1, const char *s2, size_t length)
const char * timelib_error_messages[10]
void timelib_dump_rel_time(timelib_rel_time *d)
void timelib_error_container_dtor(timelib_error_container *errors)
void timelib_dump_date(timelib_time *d, int options)
int timelib_strcasecmp(const char *s1, const char *s2)
timelib_rel_time * timelib_rel_time_clone(timelib_rel_time *rel)
void timelib_time_dtor(timelib_time *t)
void timelib_time_tz_abbr_update(timelib_time *tm, const char *tz_abbr)
timelib_time_offset * timelib_time_offset_ctor(void)
void timelib_rel_time_dtor(timelib_rel_time *t)
timelib_sll timelib_hms_to_seconds(timelib_sll h, timelib_sll m, timelib_sll s)
timelib_rel_time * timelib_rel_time_ctor(void)
char * timelib_get_tz_abbr_ptr(timelib_time *t)
void timelib_hms_to_decimal_hour(int hour, int min, int sec, double *h)
#define TIMELIB_ZONETYPE_ID
struct _timelib_error_container timelib_error_container
void timelib_update_ts(timelib_time *time, timelib_tzinfo *tzi)
#define TIMELIB_ZONETYPE_OFFSET
struct _timelib_time timelib_time
struct _timelib_rel_time timelib_rel_time
signed long long timelib_sll
struct _timelib_time_offset timelib_time_offset
#define TIMELIB_ZONETYPE_ABBR
#define TIMELIB_TIME_FREE(m)
#define TIMELIB_SPECIAL_WEEKDAY
#define TIMELIB_SPECIAL_DAY_OF_WEEK_IN_MONTH
#define TIMELIB_SPECIAL_LAST_DAY_OF_WEEK_IN_MONTH