Changeset 123505 in webkit


Ignore:
Timestamp:
Jul 24, 2012 12:25:30 PM (12 years ago)
Author:
Patrick Gansterer
Message:

Store the full year in GregorianDateTime
https://bugs.webkit.org/show_bug.cgi?id=92067

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

Use the full year instead of the offset from year 1900
for the year member variable of GregorianDateTime.

  • runtime/DateConstructor.cpp:

(JSC::constructDate):
(JSC::dateUTC):

  • runtime/DateConversion.cpp:

(JSC::formatDate):
(JSC::formatDateUTCVariant):

  • runtime/DatePrototype.cpp:

(JSC::formatLocaleDate):
(JSC::fillStructuresUsingDateArgs):
(JSC::dateProtoFuncToISOString):
(JSC::dateProtoFuncGetFullYear):
(JSC::dateProtoFuncGetUTCFullYear):
(JSC::dateProtoFuncSetYear):

  • runtime/JSDateMath.cpp:

(JSC::gregorianDateTimeToMS):
(JSC::msToGregorianDateTime):

Source/WebCore:

Use the full year instead of the offset from year 1900
for the year member variable of GregorianDateTime.

  • bridge/qt/qt_runtime.cpp:

(JSC::Bindings::convertValueToQVariant):
(JSC::Bindings::convertQVariantToValue):

  • bridge/qt/qt_runtime_qt4.cpp:

(JSC::Bindings::convertValueToQVariant):
(JSC::Bindings::convertQVariantToValue):

Source/WTF:

Use the full year instead of the offset from year 1900
for the year member variable of GregorianDateTime.

  • wtf/GregorianDateTime.h:

(WTF::GregorianDateTime::operator tm):

Location:
trunk/Source
Files:
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r123503 r123505  
     12012-07-24  Patrick Gansterer  <paroga@webkit.org>
     2
     3        Store the full year in GregorianDateTime
     4        https://bugs.webkit.org/show_bug.cgi?id=92067
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Use the full year instead of the offset from year 1900
     9        for the year member variable of GregorianDateTime.
     10
     11        * runtime/DateConstructor.cpp:
     12        (JSC::constructDate):
     13        (JSC::dateUTC):
     14        * runtime/DateConversion.cpp:
     15        (JSC::formatDate):
     16        (JSC::formatDateUTCVariant):
     17        * runtime/DatePrototype.cpp:
     18        (JSC::formatLocaleDate):
     19        (JSC::fillStructuresUsingDateArgs):
     20        (JSC::dateProtoFuncToISOString):
     21        (JSC::dateProtoFuncGetFullYear):
     22        (JSC::dateProtoFuncGetUTCFullYear):
     23        (JSC::dateProtoFuncSetYear):
     24        * runtime/JSDateMath.cpp:
     25        (JSC::gregorianDateTimeToMS):
     26        (JSC::msToGregorianDateTime):
     27
    1282012-07-24  Patrick Gansterer  <paroga@webkit.org>
    229
  • trunk/Source/JavaScriptCore/runtime/DateConstructor.cpp

    r123425 r123505  
    137137            GregorianDateTime t;
    138138            int year = JSC::toInt32(doubleArguments[0]);
    139             t.setYear((year >= 0 && year <= 99) ? year : year - 1900);
     139            t.setYear((year >= 0 && year <= 99) ? (year + 1900) : year);
    140140            t.setMonth(JSC::toInt32(doubleArguments[1]));
    141141            t.setMonthDay((numArgs >= 3) ? JSC::toInt32(doubleArguments[2]) : 1);
     
    215215    GregorianDateTime t;
    216216    int year = JSC::toInt32(doubleArguments[0]);
    217     t.setYear((year >= 0 && year <= 99) ? year : year - 1900);
     217    t.setYear((year >= 0 && year <= 99) ? (year + 1900) : year);
    218218    t.setMonth(JSC::toInt32(doubleArguments[1]));
    219219    t.setMonthDay((n >= 3) ? JSC::toInt32(doubleArguments[2]) : 1);
  • trunk/Source/JavaScriptCore/runtime/DateConversion.cpp

    r123425 r123505  
    6060    snprintf(buffer, DateConversionBufferSize, "%s %s %02d %04d",
    6161        weekdayName[(t.weekDay() + 6) % 7],
    62         monthName[t.month()], t.monthDay(), t.year() + 1900);
     62        monthName[t.month()], t.monthDay(), t.year());
    6363}
    6464
     
    6767    snprintf(buffer, DateConversionBufferSize, "%s, %02d %s %04d",
    6868        weekdayName[(t.weekDay() + 6) % 7],
    69         t.monthDay(), monthName[t.month()], t.year() + 1900);
     69        t.monthDay(), monthName[t.month()], t.year());
    7070}
    7171
  • trunk/Source/JavaScriptCore/runtime/DatePrototype.cpp

    r123425 r123505  
    223223    SYSTEMTIME systemTime;
    224224    memset(&systemTime, 0, sizeof(systemTime));
    225     systemTime.wYear = gdt.year() + 1900;
     225    systemTime.wYear = gdt.year();
    226226    systemTime.wMonth = gdt.month() + 1;
    227227    systemTime.wDay = gdt.monthDay();
     
    266266    // Offset year if needed
    267267    struct tm localTM = gdt;
    268     int year = gdt.year() + 1900;
     268    int year = gdt.year();
    269269    bool yearNeedsOffset = year < 1900 || year > 2038;
    270270    if (yearNeedsOffset)
     
    413413        double years = exec->argument(idx++).toIntegerPreserveNaN(exec);
    414414        ok = isfinite(years);
    415         t->setYear(toInt32(years - 1900));
     415        t->setYear(toInt32(years));
    416416    }
    417417    // months
     
    568568    if (ms < 0)
    569569        ms += msPerSecond;
    570     if (gregorianDateTime->year() > 8099 || gregorianDateTime->year() < -1900)
    571         snprintf(buffer, sizeof(buffer) - 1, "%+07d-%02d-%02dT%02d:%02d:%02d.%03dZ", 1900 + gregorianDateTime->year(), gregorianDateTime->month() + 1, gregorianDateTime->monthDay(), gregorianDateTime->hour(), gregorianDateTime->minute(), gregorianDateTime->second(), ms);
     570    if (gregorianDateTime->year() > 9999 || gregorianDateTime->year() < 0)
     571        snprintf(buffer, sizeof(buffer) - 1, "%+07d-%02d-%02dT%02d:%02d:%02d.%03dZ", gregorianDateTime->year(), gregorianDateTime->month() + 1, gregorianDateTime->monthDay(), gregorianDateTime->hour(), gregorianDateTime->minute(), gregorianDateTime->second(), ms);
    572572    else
    573         snprintf(buffer, sizeof(buffer) - 1, "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", 1900 + gregorianDateTime->year(), gregorianDateTime->month() + 1, gregorianDateTime->monthDay(), gregorianDateTime->hour(), gregorianDateTime->minute(), gregorianDateTime->second(), ms);
     573        snprintf(buffer, sizeof(buffer) - 1, "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", gregorianDateTime->year(), gregorianDateTime->month() + 1, gregorianDateTime->monthDay(), gregorianDateTime->hour(), gregorianDateTime->minute(), gregorianDateTime->second(), ms);
    574574    buffer[sizeof(buffer) - 1] = 0;
    575575    return JSValue::encode(jsNontrivialString(exec, buffer));
     
    658658    if (!gregorianDateTime)
    659659        return JSValue::encode(jsNaN());
    660     return JSValue::encode(jsNumber(1900 + gregorianDateTime->year()));
     660    return JSValue::encode(jsNumber(gregorianDateTime->year()));
    661661}
    662662
     
    672672    if (!gregorianDateTime)
    673673        return JSValue::encode(jsNaN());
    674     return JSValue::encode(jsNumber(1900 + gregorianDateTime->year()));
     674    return JSValue::encode(jsNumber(gregorianDateTime->year()));
    675675}
    676676
     
    11171117    }
    11181118
    1119     gregorianDateTime.setYear(toInt32((year > 99 || year < 0) ? year - 1900 : year));
     1119    gregorianDateTime.setYear(toInt32((year >= 0 && year <= 99) ? (year + 1900) : year));
    11201120    JSValue result = jsNumber(gregorianDateTimeToMS(exec, gregorianDateTime, ms, false));
    11211121    thisDateObj->setInternalValue(exec->globalData(), result);
  • trunk/Source/JavaScriptCore/runtime/JSDateMath.cpp

    r123425 r123505  
    204204double gregorianDateTimeToMS(ExecState* exec, const GregorianDateTime& t, double milliSeconds, bool inputIsUTC)
    205205{
    206     double day = dateToDaysFrom1970(t.year() + 1900, t.month(), t.monthDay());
     206    double day = dateToDaysFrom1970(t.year(), t.month(), t.monthDay());
    207207    double ms = timeToMS(t.hour(), t.minute(), t.second(), milliSeconds);
    208208    double result = (day * WTF::msPerDay) + ms;
     
    236236    tm.setMonthDay(dayInMonthFromDayInYear(tm.yearDay(), isLeapYear(year)));
    237237    tm.setMonth(monthFromDayInYear(tm.yearDay(), isLeapYear(year)));
    238     tm.setYear(year - 1900);
     238    tm.setYear(year);
    239239    tm.setIsDST(dstOff != 0.0);
    240240    tm.setUtcOffset(static_cast<long>((dstOff + utcOff) / WTF::msPerSecond));
  • trunk/Source/WTF/ChangeLog

    r123425 r123505  
     12012-07-24  Patrick Gansterer  <paroga@webkit.org>
     2
     3        Store the full year in GregorianDateTime
     4        https://bugs.webkit.org/show_bug.cgi?id=92067
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Use the full year instead of the offset from year 1900
     9        for the year member variable of GregorianDateTime.
     10
     11        * wtf/GregorianDateTime.h:
     12        (WTF::GregorianDateTime::operator tm):
     13
    1142012-07-23  Patrick Gansterer  <paroga@webkit.org>
    215
  • trunk/Source/WTF/wtf/GregorianDateTime.h

    r123425 r123505  
    7474        memset(&ret, 0, sizeof(ret));
    7575
    76         ret.tm_year = m_year;
     76        ret.tm_year = m_year - 1900;
    7777        ret.tm_mon = m_month;
    7878        ret.tm_yday = m_yearDay;
  • trunk/Source/WebCore/ChangeLog

    r123504 r123505  
     12012-07-24  Patrick Gansterer  <paroga@webkit.org>
     2
     3        Store the full year in GregorianDateTime
     4        https://bugs.webkit.org/show_bug.cgi?id=92067
     5
     6        Reviewed by Geoffrey Garen.
     7
     8        Use the full year instead of the offset from year 1900
     9        for the year member variable of GregorianDateTime.
     10
     11        * bridge/qt/qt_runtime.cpp:
     12        (JSC::Bindings::convertValueToQVariant):
     13        (JSC::Bindings::convertQVariantToValue):
     14        * bridge/qt/qt_runtime_qt4.cpp:
     15        (JSC::Bindings::convertValueToQVariant):
     16        (JSC::Bindings::convertQVariantToValue):
     17
    1182012-07-24  Benjamin Poulain  <bpoulain@apple.com>
    219
  • trunk/Source/WebCore/bridge/qt/qt_runtime.cpp

    r123435 r123505  
    505505                msToGregorianDateTime(exec, date->internalNumber(), true, gdt);
    506506                if (hint == QMetaType::QDateTime) {
    507                     ret = QDateTime(QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
     507                    ret = QDateTime(QDate(gdt.year(), gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
    508508                    dist = 0;
    509509                } else if (hint == QMetaType::QDate) {
    510                     ret = QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay());
     510                    ret = QDate(gdt.year(), gdt.month() + 1, gdt.monthDay());
    511511                    dist = 1;
    512512                } else {
     
    519519                msToGregorianDateTime(exec, b, true, gdt);
    520520                if (hint == QMetaType::QDateTime) {
    521                     ret = QDateTime(QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
     521                    ret = QDateTime(QDate(gdt.year(), gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
    522522                    dist = 6;
    523523                } else if (hint == QMetaType::QDate) {
    524                     ret = QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay());
     524                    ret = QDate(gdt.year(), gdt.month() + 1, gdt.monthDay());
    525525                    dist = 8;
    526526                } else {
     
    875875        // Dates specified this way are in local time (we convert DateTimes above)
    876876        GregorianDateTime dt;
    877         dt.setYear(date.year() - 1900);
     877        dt.setYear(date.year());
    878878        dt.setMonth(date.month() - 1);
    879879        dt.setMonthDay(date.day());
  • trunk/Source/WebCore/bridge/qt/qt_runtime_qt4.cpp

    r123435 r123505  
    505505                msToGregorianDateTime(exec, date->internalNumber(), true, gdt);
    506506                if (hint == QMetaType::QDateTime) {
    507                     ret = QDateTime(QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
     507                    ret = QDateTime(QDate(gdt.year(), gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
    508508                    dist = 0;
    509509                } else if (hint == QMetaType::QDate) {
    510                     ret = QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay());
     510                    ret = QDate(gdt.year(), gdt.month() + 1, gdt.monthDay());
    511511                    dist = 1;
    512512                } else {
     
    519519                msToGregorianDateTime(exec, b, true, gdt);
    520520                if (hint == QMetaType::QDateTime) {
    521                     ret = QDateTime(QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
     521                    ret = QDateTime(QDate(gdt.year(), gdt.month() + 1, gdt.monthDay()), QTime(gdt.hour(), gdt.minute(), gdt.second()), Qt::UTC);
    522522                    dist = 6;
    523523                } else if (hint == QMetaType::QDate) {
    524                     ret = QDate(gdt.year() + 1900, gdt.month() + 1, gdt.monthDay());
     524                    ret = QDate(gdt.year(), gdt.month() + 1, gdt.monthDay());
    525525                    dist = 8;
    526526                } else {
     
    875875        // Dates specified this way are in local time (we convert DateTimes above)
    876876        GregorianDateTime dt;
    877         dt.setYear(date.year() - 1900);
     877        dt.setYear(date.year());
    878878        dt.setMonth(date.month() - 1);
    879879        dt.setMonthDay(date.day());
Note: See TracChangeset for help on using the changeset viewer.