14#define DUK__STRPTIME_BUF_SIZE 64
15#define DUK__STRFTIME_BUF_SIZE 64
17#if defined(DUK_USE_DATE_NOW_GETTIMEOFDAY)
24 if (gettimeofday(&tv,
NULL) != 0) {
36#if defined(DUK_USE_DATE_NOW_TIME)
47#if defined(DUK_USE_DATE_TZO_GMTIME) || defined(DUK_USE_DATE_TZO_GMTIME_R)
54#ifdef DUK_USE_DATE_TZO_GMTIME
70 DUK_DD(
DUK_DDPRINT(
"timeval not within valid range, skip tzoffset computation to avoid integer overflows"));
128 DUK_ASSERT(d >= 0 && d < 2147483648.0 * 1000.0);
129 t = (time_t) (d / 1000.0);
134#if defined(DUK_USE_DATE_TZO_GMTIME_R)
135 (void) gmtime_r(&t, &tms[0]);
136 (void) localtime_r(&t, &tms[1]);
137#elif defined(DUK_USE_DATE_TZO_GMTIME)
139 DUK_MEMCPY((
void *) &tms[0], tm_ptr,
sizeof(
struct tm));
140 tm_ptr = localtime(&t);
141 DUK_MEMCPY((
void *) &tms[1], tm_ptr,
sizeof(
struct tm));
145 DUK_DDD(
DUK_DDDPRINT(
"gmtime result: tm={sec:%ld,min:%ld,hour:%ld,mday:%ld,mon:%ld,year:%ld,"
146 "wday:%ld,yday:%ld,isdst:%ld}",
147 (
long) tms[0].tm_sec, (
long) tms[0].tm_min, (
long) tms[0].tm_hour,
148 (
long) tms[0].tm_mday, (
long) tms[0].tm_mon, (
long) tms[0].tm_year,
149 (
long) tms[0].tm_wday, (
long) tms[0].tm_yday, (
long) tms[0].tm_isdst));
150 DUK_DDD(
DUK_DDDPRINT(
"localtime result: tm={sec:%ld,min:%ld,hour:%ld,mday:%ld,mon:%ld,year:%ld,"
151 "wday:%ld,yday:%ld,isdst:%ld}",
152 (
long) tms[1].tm_sec, (
long) tms[1].tm_min, (
long) tms[1].tm_hour,
153 (
long) tms[1].tm_mday, (
long) tms[1].tm_mon, (
long) tms[1].tm_year,
154 (
long) tms[1].tm_wday, (
long) tms[1].tm_yday, (
long) tms[1].tm_isdst));
163 t1 = mktime(&tms[0]);
164 t2 = mktime(&tms[1]);
165 if (t1 == (time_t) -1 || t2 == (time_t) -1) {
194#if defined(DUK_USE_DATE_PRS_STRPTIME)
203 DUK_SNPRINTF(buf,
sizeof(buf),
"%s", (
const char *) str);
204 buf[
sizeof(buf) - 1] = (
char) 0;
209 if (strptime((
const char *) buf,
"%c", &tm) !=
NULL) {
210 DUK_DDD(
DUK_DDDPRINT(
"before mktime: tm={sec:%ld,min:%ld,hour:%ld,mday:%ld,mon:%ld,year:%ld,"
211 "wday:%ld,yday:%ld,isdst:%ld}",
212 (
long) tm.tm_sec, (
long) tm.tm_min, (
long) tm.tm_hour,
213 (
long) tm.tm_mday, (
long) tm.tm_mon, (
long) tm.tm_year,
214 (
long) tm.tm_wday, (
long) tm.tm_yday, (
long) tm.tm_isdst));
229#if defined(DUK_USE_DATE_PRS_GETDATE)
256#if defined(DUK_USE_DATE_FMT_STRFTIME)
275 if (
sizeof(time_t) < 8 &&
300 (void) strftime(buf,
sizeof(buf) - 1, fmt, &tm);
308#undef DUK__STRPTIME_BUF_SIZE
309#undef DUK__STRFTIME_BUF_SIZE
unsigned int duk_small_uint_t
duk_int_fast32_t duk_int_t
#define DUK_MEMZERO(p, n)
duk_small_int_t duk_bool_t
DUK_EXTERNAL const char * duk_push_string(duk_context *ctx, const char *str)
DUK_INTERNAL_DECL void duk_bi_date_timeval_to_parts(duk_double_t d, duk_int_t *parts, duk_double_t *dparts, duk_small_uint_t flags)
DUK_INTERNAL_DECL duk_bool_t duk_bi_date_timeval_in_leeway_range(duk_double_t x)
#define DUK_ERROR_INTERNAL_DEFMSG(thr)
DUK_EXTERNAL void duk_push_number(duk_context *ctx, duk_double_t val)
DUK_INTERNAL_DECL duk_double_t duk_bi_date_get_timeval_from_dparts(duk_double_t *dparts, duk_small_uint_t flags)
#define DUK_DATE_IDX_SECOND
#define DUK_DATE_IDX_YEAR
#define DUK_DATE_FLAG_TOSTRING_DATE
#define DUK_DATE_FLAG_EQUIVYEAR
#define DUK_DATE_IDX_HOUR
#define DUK_DATE_IDX_MONTH
#define DUK_DATE_IDX_WEEKDAY
#define DUK_DATE_FLAG_TOSTRING_TIME
#define DUK_DATE_IDX_MINUTE
#define DUK_DATE_IDX_NUM_PARTS
#define DUK__STRPTIME_BUF_SIZE
#define DUK__STRFTIME_BUF_SIZE
DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_gmtime(duk_double_t d)
DUK_INTERNAL duk_double_t duk_bi_date_get_now_time(duk_context *ctx)
static void error(LoadState *S, const char *why)