Ignore:
Timestamp:
Oct 12, 2006, 10:58:09 AM (19 years ago)
Author:
kmccullo
Message:

Reviewed by Geoff.

Added our own tm struct to have a consistent set of fields, which lets us display the DST offset and timezone strings correctly. Also there is some code cleanup.

  • kjs/DateMath.cpp: (KJS::timeToMS): (KJS::getUTCOffset): (KJS::getDSTOffsetSimple): (KJS::dateToMS): (KJS::msToTM): (KJS::tmToKJStm): (KJS::KJStmToTm):
  • kjs/DateMath.h:
  • kjs/date_object.cpp: (KJS::gmtoffset): (KJS::formatTime): (KJS::DateProtoFunc::callAsFunction): (KJS::DateObjectImp::construct): (KJS::DateObjectImp::callAsFunction): (KJS::DateObjectFuncImp::callAsFunction): (KJS::parseDate):
  • kjs/date_object.h:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/date_object.cpp

    r16855 r17010  
    6868inline int gmtoffset(const tm& t)
    6969{
    70 #if PLATFORM(WIN_OS)
    71     // Time is supposed to be in the current timezone.
    72     return -(_timezone / 60 - (t.tm_isdst != 0 ? 60 : 0 )) * 60;
    73 #else
    7470    return t.tm_gmtoff;
    75 #endif
    7671}
    7772
     
    187182    } else {
    188183        int offset = abs(gmtoffset(t));
    189 #if PLATFORM(WIN_OS)
    190184        char tzname[70];
    191         strftime(tzname, sizeof(tzname), "%Z", &t);
    192 #else
    193         const char *tzname = t.tm_zone;
    194 #endif
     185        struct ::tm gtm = KJStmToTm(t);
     186        strftime(tzname, sizeof(tzname), "%Z", &gtm);
     187
    195188        if (tzname) {
    196189            snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)",
     
    487480    break;
    488481#else
    489   case ToLocaleString:
    490     strftime(timebuffer, bufsize, "%c", &t);
     482  case ToLocaleString: {
     483    struct ::tm gtm = KJStmToTm(t);
     484    strftime(timebuffer, bufsize, "%c", &gtm);
    491485    return jsString(timebuffer);
    492486    break;
    493   case ToLocaleDateString:
    494     strftime(timebuffer, bufsize, "%x", &t);
     487    }
     488  case ToLocaleDateString: {
     489    struct ::tm gtm = KJStmToTm(t);
     490    strftime(timebuffer, bufsize, "%x", &gtm);
    495491    return jsString(timebuffer);
    496492    break;
    497   case ToLocaleTimeString:
    498     strftime(timebuffer, bufsize, "%X", &t);
     493    }
     494  case ToLocaleTimeString: {
     495    struct ::tm gtm = KJStmToTm(t);
     496    strftime(timebuffer, bufsize, "%X", &gtm);
    499497    return jsString(timebuffer);
    500498    break;
     499    }
    501500#endif
    502501  case ValueOf:
     
    560559      id == SetMinutes || id == SetHours || id == SetDate ||
    561560      id == SetMonth || id == SetFullYear ) {
    562     result = jsNumber(dateToMseconds(&t, ms, utc));
     561    result = jsNumber(dateToMS(t, ms, utc));
    563562    thisDateObj->setInternalValue(result);
    564563  }
     
    647646      t.tm_isdst = -1;
    648647      double ms = (numArgs >= 7) ? roundValue(exec, args[6]) : 0;
    649       value = dateToMseconds(&t, ms, false);
     648      value = dateToMS(t, ms, false);
    650649    }
    651650  }
     
    660659{
    661660    time_t t = time(0);
    662     tm ts = *localtime(&t);
     661    tm ts = tmToKJStm(*localtime(&t));
    663662    return jsString(formatDate(ts) + " " + formatTime(ts, false));
    664663}
     
    700699    t.tm_sec = (n >= 6) ? args[5]->toInt32(exec) : 0;
    701700    double ms = (n >= 7) ? roundValue(exec, args[6]) : 0;
    702     return jsNumber(dateToMseconds(&t, ms, true));
     701    return jsNumber(dateToMS(t, ms, true));
    703702  }
    704703}
     
    10671066        t.tm_hour = hour;
    10681067
    1069         // Use our dateToMseconds() rather than mktime() as the latter can't handle the full year range.
    1070         return dateToMseconds(&t, 0, false);
     1068        // Use our dateToMS() rather than mktime() as the latter can't handle the full year range.
     1069        return dateToMS(t, 0, false);
    10711070    }
    10721071
Note: See TracChangeset for help on using the changeset viewer.