anchor.diff:          value > MAX_MILLISECONDS_SINCE_EPOCH) {
         return null;
       }
  -    if (years <= 0 || years < 100) return patchUpY2K(value, years, isUtc);
  -    return value;
  +    // The JavaScript Date constructor 'corrects' year NN to 19NN. Undo that
  +    // correction.
  +    if (0 <= years && years < 100) return patchUpY2K(value, years, isUtc);
  +    return JS('int', '#', value);
     }
   
     static patchUpY2K(value, years, isUtc) {
       var date = JS('', r'new Date(#)', value);
  +    // TODO(sra): Does this work correctly if the original input wrapped months
  +    // into a different year?
       if (isUtc) {
         JS('num', r'#.setUTCFullYear(#)', date, years);
       } else {
  
positive.code:         : JS('JSUInt31', r'(#.getMilliseconds() + 0)', lazyAsJsDate(receiver));
    }
  
    static getWeekday(DateTime receiver) {
      int weekday = (receiver.isUtc)
          ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver))
  
negative.code: 
    static int getTimeZoneOffsetInMinutes(DateTime receiver) {
      // Note that JS and Dart disagree on the sign of the offset.
      // Subtract to avoid -0.0
      return 0 - JS('int', r'#.getTimezoneOffset()', lazyAsJsDate(receiver));
    }
  
    static int valueFromDecomposedDate(
        years, month, day, hours, minutes, seconds, milliseconds, isUtc) {
      final int MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
      checkInt(years);
  