Changeset 17031 in webkit for trunk/JavaScriptCore/kjs/date_object.cpp
- Timestamp:
- Oct 13, 2006, 10:31:11 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/JavaScriptCore/kjs/date_object.cpp
r17015 r17031 66 66 static double timeClip(double); 67 67 68 inline int gmtoffset(const tm& t)69 { 70 return static_cast<int>(t.tm_gmtoff);68 inline int gmtoffset(const GregorianDateTime& t) 69 { 70 return t.utcOffset; 71 71 } 72 72 … … 157 157 #endif // PLATFORM(MAC) 158 158 159 static UString formatDate(const tm&t)159 static UString formatDate(const GregorianDateTime &t) 160 160 { 161 161 char buffer[100]; 162 162 snprintf(buffer, sizeof(buffer), "%s %s %02d %04d", 163 weekdayName[(t. tm_wday + 6) % 7],164 monthName[t. tm_mon], t.tm_mday, t.tm_year + 1900);163 weekdayName[(t.weekDay + 6) % 7], 164 monthName[t.month], t.monthDay, t.year + 1900); 165 165 return buffer; 166 166 } 167 167 168 static UString formatDateUTCVariant(const tm&t)168 static UString formatDateUTCVariant(const GregorianDateTime &t) 169 169 { 170 170 char buffer[100]; 171 171 snprintf(buffer, sizeof(buffer), "%s, %02d %s %04d", 172 weekdayName[(t. tm_wday + 6) % 7],173 t. tm_mday, monthName[t.tm_mon], t.tm_year + 1900);172 weekdayName[(t.weekDay + 6) % 7], 173 t.monthDay, monthName[t.month], t.year + 1900); 174 174 return buffer; 175 175 } 176 176 177 static UString formatTime(const tm&t, bool utc)177 static UString formatTime(const GregorianDateTime &t, bool utc) 178 178 { 179 179 char buffer[100]; 180 180 if (utc) { 181 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT", t. tm_hour, t.tm_min, t.tm_sec);181 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT", t.hour, t.minute, t.second); 182 182 } else { 183 183 int offset = abs(gmtoffset(t)); 184 184 char tzname[70]; 185 struct ::tm gtm = KJStmToTm(t);185 struct ::tm gtm = t.toTM(); 186 186 strftime(tzname, sizeof(tzname), "%Z", >m); 187 187 188 188 if (tzname) { 189 189 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d (%s)", 190 t. tm_hour, t.tm_min, t.tm_sec,190 t.hour, t.minute, t.second, 191 191 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60, tzname); 192 192 } else { 193 193 snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d GMT%c%02d%02d", 194 t. tm_hour, t.tm_min, t.tm_sec,194 t.hour, t.minute, t.second, 195 195 gmtoffset(t) < 0 ? '-' : '+', offset / (60*60), (offset / 60) % 60); 196 196 } … … 203 203 // 204 204 // Format of member function: f([hour,] [min,] [sec,] [ms]) 205 static void fillStructuresUsingTimeArgs(ExecState *exec, const List &args, int maxArgs, double *ms, tm*t)205 static void fillStructuresUsingTimeArgs(ExecState *exec, const List &args, int maxArgs, double *ms, GregorianDateTime *t) 206 206 { 207 207 double milliseconds = 0; … … 215 215 // hours 216 216 if (maxArgs >= 4 && idx < numArgs) { 217 t-> tm_hour = 0;217 t->hour = 0; 218 218 milliseconds += args[idx++]->toInt32(exec) * msPerHour; 219 219 } … … 221 221 // minutes 222 222 if (maxArgs >= 3 && idx < numArgs) { 223 t-> tm_min= 0;223 t->minute = 0; 224 224 milliseconds += args[idx++]->toInt32(exec) * msPerMinute; 225 225 } … … 227 227 // seconds 228 228 if (maxArgs >= 2 && idx < numArgs) { 229 t-> tm_sec= 0;229 t->second = 0; 230 230 milliseconds += args[idx++]->toInt32(exec) * msPerSecond; 231 231 } … … 245 245 // 246 246 // Format of member function: f([years,] [months,] [days]) 247 static void fillStructuresUsingDateArgs(ExecState *exec, const List &args, int maxArgs, double *ms, tm*t)247 static void fillStructuresUsingDateArgs(ExecState *exec, const List &args, int maxArgs, double *ms, GregorianDateTime *t) 248 248 { 249 249 int idx = 0; … … 256 256 // years 257 257 if (maxArgs >= 3 && idx < numArgs) 258 t-> tm_year = args[idx++]->toInt32(exec) - 1900;258 t->year = args[idx++]->toInt32(exec) - 1900; 259 259 260 260 // months 261 261 if (maxArgs >= 2 && idx < numArgs) 262 t-> tm_mon= args[idx++]->toInt32(exec);262 t->month = args[idx++]->toInt32(exec); 263 263 264 264 // days 265 265 if (idx < numArgs) { 266 t-> tm_mday = 0;266 t->monthDay = 0; 267 267 *ms += args[idx]->toInt32(exec) * msPerDay; 268 268 } … … 278 278 } 279 279 280 bool DateInstance::getTime( tm&t, int &offset) const280 bool DateInstance::getTime(GregorianDateTime &t, int &offset) const 281 281 { 282 282 double milli = internalValue()->getNumber(); … … 284 284 return false; 285 285 286 msTo TM(milli, false, t);286 msToGregorianDateTime(milli, false, t); 287 287 offset = gmtoffset(t); 288 288 return true; 289 289 } 290 290 291 bool DateInstance::getUTCTime( tm&t) const291 bool DateInstance::getUTCTime(GregorianDateTime &t) const 292 292 { 293 293 double milli = internalValue()->getNumber(); … … 295 295 return false; 296 296 297 msTo TM(milli, true, t);297 msToGregorianDateTime(milli, true, t); 298 298 return true; 299 299 } … … 305 305 return false; 306 306 307 tmt;308 msTo TM(milli, false, t);307 GregorianDateTime t; 308 msToGregorianDateTime(milli, false, t); 309 309 offset = gmtoffset(t); 310 310 return true; … … 453 453 double ms = milli - secs * msPerSecond; 454 454 455 tmt;456 msTo TM(milli, utc, t);455 GregorianDateTime t; 456 msToGregorianDateTime(milli, utc, t); 457 457 458 458 switch (id) { … … 505 505 // IE returns the full year even in getYear. 506 506 if (exec->dynamicInterpreter()->compatMode() == Interpreter::IECompat) 507 return jsNumber(1900 + t. tm_year);508 return jsNumber(t. tm_year);507 return jsNumber(1900 + t.year); 508 return jsNumber(t.year); 509 509 case GetFullYear: 510 return jsNumber(1900 + t. tm_year);510 return jsNumber(1900 + t.year); 511 511 case GetMonth: 512 return jsNumber(t. tm_mon);512 return jsNumber(t.month); 513 513 case GetDate: 514 return jsNumber(t. tm_mday);514 return jsNumber(t.monthDay); 515 515 case GetDay: 516 return jsNumber(t. tm_wday);516 return jsNumber(t.weekDay); 517 517 case GetHours: 518 return jsNumber(t. tm_hour);518 return jsNumber(t.hour); 519 519 case GetMinutes: 520 return jsNumber(t. tm_min);520 return jsNumber(t.minute); 521 521 case GetSeconds: 522 return jsNumber(t. tm_sec);522 return jsNumber(t.second); 523 523 case GetMilliSeconds: 524 524 return jsNumber(ms); … … 552 552 break; 553 553 case SetYear: 554 t. tm_year = (args[0]->toInt32(exec) > 99 || args[0]->toInt32(exec) < 0) ? args[0]->toInt32(exec) - 1900 : args[0]->toInt32(exec);554 t.year = (args[0]->toInt32(exec) > 99 || args[0]->toInt32(exec) < 0) ? args[0]->toInt32(exec) - 1900 : args[0]->toInt32(exec); 555 555 break; 556 556 } … … 559 559 id == SetMinutes || id == SetHours || id == SetDate || 560 560 id == SetMonth || id == SetFullYear ) { 561 result = jsNumber( dateToMS(t, ms, utc));561 result = jsNumber(gregorianDateTimeToMS(t, ms, utc)); 562 562 thisDateObj->setInternalValue(result); 563 563 } … … 635 635 value = NaN; 636 636 } else { 637 tmt;637 GregorianDateTime t; 638 638 memset(&t, 0, sizeof(t)); 639 639 int year = args[0]->toInt32(exec); 640 t. tm_year = (year >= 0 && year <= 99) ? year : year - 1900;641 t. tm_mon= args[1]->toInt32(exec);642 t. tm_mday = (numArgs >= 3) ? args[2]->toInt32(exec) : 1;643 t. tm_hour = (numArgs >= 4) ? args[3]->toInt32(exec) : 0;644 t. tm_min= (numArgs >= 5) ? args[4]->toInt32(exec) : 0;645 t. tm_sec= (numArgs >= 6) ? args[5]->toInt32(exec) : 0;646 t. tm_isdst= -1;640 t.year = (year >= 0 && year <= 99) ? year : year - 1900; 641 t.month = args[1]->toInt32(exec); 642 t.monthDay = (numArgs >= 3) ? args[2]->toInt32(exec) : 1; 643 t.hour = (numArgs >= 4) ? args[3]->toInt32(exec) : 0; 644 t.minute = (numArgs >= 5) ? args[4]->toInt32(exec) : 0; 645 t.second = (numArgs >= 6) ? args[5]->toInt32(exec) : 0; 646 t.isDST = -1; 647 647 double ms = (numArgs >= 7) ? roundValue(exec, args[6]) : 0; 648 value = dateToMS(t, ms, false);648 value = gregorianDateTimeToMS(t, ms, false); 649 649 } 650 650 } … … 659 659 { 660 660 time_t t = time(0); 661 tm ts = tmToKJStm(*localtime(&t));661 GregorianDateTime ts(*localtime(&t)); 662 662 return jsString(formatDate(ts) + " " + formatTime(ts, false)); 663 663 } … … 689 689 } 690 690 691 tmt;691 GregorianDateTime t; 692 692 memset(&t, 0, sizeof(t)); 693 693 int year = args[0]->toInt32(exec); 694 t. tm_year = (year >= 0 && year <= 99) ? year : year - 1900;695 t. tm_mon= args[1]->toInt32(exec);696 t. tm_mday = (n >= 3) ? args[2]->toInt32(exec) : 1;697 t. tm_hour = (n >= 4) ? args[3]->toInt32(exec) : 0;698 t. tm_min= (n >= 5) ? args[4]->toInt32(exec) : 0;699 t. tm_sec= (n >= 6) ? args[5]->toInt32(exec) : 0;694 t.year = (year >= 0 && year <= 99) ? year : year - 1900; 695 t.month = args[1]->toInt32(exec); 696 t.monthDay = (n >= 3) ? args[2]->toInt32(exec) : 1; 697 t.hour = (n >= 4) ? args[3]->toInt32(exec) : 0; 698 t.minute = (n >= 5) ? args[4]->toInt32(exec) : 0; 699 t.second = (n >= 6) ? args[5]->toInt32(exec) : 0; 700 700 double ms = (n >= 7) ? roundValue(exec, args[6]) : 0; 701 return jsNumber( dateToMS(t, ms, true));701 return jsNumber(gregorianDateTimeToMS(t, ms, true)); 702 702 } 703 703 } … … 1056 1056 // fall back to local timezone 1057 1057 if (!haveTZ) { 1058 tmt;1058 GregorianDateTime t; 1059 1059 memset(&t, 0, sizeof(tm)); 1060 t. tm_mday = day;1061 t. tm_mon= month;1062 t. tm_year = year - 1900;1063 t. tm_isdst= -1;1064 t. tm_sec= second;1065 t. tm_min= minute;1066 t. tm_hour = hour;1067 1068 // Use our dateToMS() rather than mktime() as the latter can't handle the full year range.1069 return dateToMS(t, 0, false);1060 t.monthDay = day; 1061 t.month = month; 1062 t.year = year - 1900; 1063 t.isDST = -1; 1064 t.second = second; 1065 t.minute = minute; 1066 t.hour = hour; 1067 1068 // Use our gregorianDateTimeToMS() rather than mktime() as the latter can't handle the full year range. 1069 return gregorianDateTimeToMS(t, 0, false); 1070 1070 } 1071 1071
Note:
See TracChangeset
for help on using the changeset viewer.