⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jsdate.c

📁 java script test programing source code
💻 C
📖 第 1 页 / 共 5 页
字号:
/* * Check that obj is an object of class Date, and get the date value. * Return NULL on failure. */static jsdouble *date_getProlog(JSContext *cx, JSObject *obj, jsval *argv){    if (!JS_InstanceOf(cx, obj, &js_DateClass, argv))        return NULL;    return JSVAL_TO_DOUBLE(OBJ_GET_SLOT(cx, obj, JSSLOT_PRIVATE));}/* * See ECMA 15.9.5.4 thru 15.9.5.23 */static JSBooldate_getTime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    return js_NewNumberValue(cx, *date, rval);}static JSBooldate_getYear(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    jsdouble *date;    jsdouble result;    date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = YearFromTime(LocalTime(result));    /* Follow ECMA-262 to the letter, contrary to IE JScript. */    result -= 1900;    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getFullYear(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                 jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = YearFromTime(LocalTime(result));    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getUTCFullYear(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                    jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = YearFromTime(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getMonth(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,              jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = MonthFromTime(LocalTime(result));    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getUTCMonth(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                 jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = MonthFromTime(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getDate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = LocalTime(result);    result = DateFromTime(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getUTCDate(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = DateFromTime(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getDay(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = LocalTime(result);    result = WeekDay(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getUTCDay(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,               jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = WeekDay(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getHours(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,              jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = HourFromTime(LocalTime(result));    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getUTCHours(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                 jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = HourFromTime(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getMinutes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = MinFromTime(LocalTime(result));    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getUTCMinutes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                   jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = MinFromTime(result);    return js_NewNumberValue(cx, result, rval);}/* Date.getSeconds is mapped to getUTCSeconds */static JSBooldate_getUTCSeconds(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = SecFromTime(result);    return js_NewNumberValue(cx, result, rval);}/* Date.getMilliseconds is mapped to getUTCMilliseconds */static JSBooldate_getUTCMilliseconds(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                     jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    result = msFromTime(result);    return js_NewNumberValue(cx, result, rval);}static JSBooldate_getTimezoneOffset(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,                       jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    /*     * Return the time zone offset in minutes for the current locale     * that is appropriate for this time. This value would be a     * constant except for daylight savings time.     */    result = (result - LocalTime(result)) / msPerMinute;    return js_NewNumberValue(cx, result, rval);}static JSBooldate_setTime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    if (!js_ValueToNumber(cx, argv[0], &result))        return JS_FALSE;    result = TIMECLIP(result);    *date = result;    return js_NewNumberValue(cx, result, rval);}static JSBooldate_makeTime(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,              uintN maxargs, JSBool local, jsval *rval){    uintN i;    jsdouble args[4], *argp, *stop;    jsdouble hour, min, sec, msec;    jsdouble lorutime; /* Local or UTC version of *date */    jsdouble msec_time;    jsdouble result;    jsdouble *date = date_getProlog(cx, obj, argv);    if (!date)        return JS_FALSE;    result = *date;    /* just return NaN if the date is already NaN */    if (!JSDOUBLE_IS_FINITE(result))        return js_NewNumberValue(cx, result, rval);    /* Satisfy the ECMA rule that if a function is called with     * fewer arguments than the specified formal arguments, the     * remaining arguments are set to undefined.  Seems like all     * the Date.setWhatever functions in ECMA are only varargs     * beyond the first argument; this should be set to undefined     * if it's not given.  This means that "d = new Date();     * d.setMilliseconds()" returns NaN.  Blech.     */    if (argc == 0)        argc = 1;   /* should be safe, because length of all setters is 1 */    else if (argc > maxargs)        argc = maxargs;  /* clamp argc */    for (i = 0; i < argc; i++) {        if (!js_ValueToNumber(cx, argv[i], &args[i]))            return JS_FALSE;        if (!JSDOUBLE_IS_FINITE(args[i])) {            *date = *cx->runtime->jsNaN;            return js_NewNumberValue(cx, *date, rval);        }        args[i] = js_DoubleToInteger(args[i]);    }    if (local)        lorutime = LocalTime(result);    else        lorutime = result;    argp = args;    stop = argp + argc;    if (maxargs >= 4 && argp < stop)        hour = *argp++;    else        hour = HourFromTime(lorutime);    if (maxargs >= 3 && argp < stop)        min = *argp++;    else        min = MinFromTime(lorutime);    if (maxargs >= 2 && argp < stop)        sec = *argp++;    else        sec = SecFromTime(lorutime);    if (maxargs >= 1 && argp < stop)        msec = *argp;    else        msec = msFromTime(lorutime);    msec_time = MakeTime(hour, min, sec, msec);    result = MakeDate(Day(lorutime), msec_time);/*     fprintf(stderr, "%f\n", result); */    if (local)        result = UTC(result);/*     fprintf(stderr, "%f\n", result); */    *date = TIMECLIP(result);    return js_NewNumberValue(cx, *date, rval);}static JSBooldate_setMilliseconds(JSContext *cx, JSObject *obj, uintN argc,                     jsval *argv, jsval *rval){    return date_makeTime(cx, obj, argc, argv, 1, JS_TRUE, rval);}static JSBooldate_setUTCMilliseconds(JSContext *cx, JSObject *obj, uintN argc,                        jsval *argv, jsval *rval){    return date_makeTime(cx, obj, argc, argv, 1, JS_FALSE, rval);}static JSBooldate_setSeconds(JSContext *cx, JSObject *obj, uintN argc,                jsval *argv, jsval *rval){    return date_makeTime(cx, obj, argc, argv, 2, JS_TRUE, rval);}static JSBooldate_setUTCSeconds(JSContext *cx, JSObject *obj, uintN argc,                   jsval *argv, jsval *rval){    return date_makeTime(cx, obj, argc, argv, 2, JS_FALSE, rval);}static JSBooldate_setMinutes(JSContext *cx, JSObject *obj, uintN argc,                jsval *argv, jsval *rval){    return date_makeTime(cx, obj, argc, argv, 3, JS_TRUE, rval);}static JSBooldate_setUTCMinutes(JSContext *cx, JSObject *obj, uintN argc,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -