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:   // The getters for date and time parts below add a positive integer to ensure
    // that the result is really an integer, because the JavaScript implementation
    // may return -0.0 instead of 0.
  
    static getYear(DateTime receiver) {
      return (receiver.isUtc)
          ? JS('int', r'(#.getUTCFullYear() + 0)', lazyAsJsDate(receiver))
          : JS('int', r'(#.getFullYear() + 0)', lazyAsJsDate(receiver));
    }
  
    static getMonth(DateTime receiver) {
      return (receiver.isUtc)
          ? JS('JSUInt31', r'#.getUTCMonth() + 1', lazyAsJsDate(receiver))
          : JS('JSUInt31', r'#.getMonth() + 1', lazyAsJsDate(receiver));
    }
  
    static getDay(DateTime receiver) {
      return (receiver.isUtc)
          ? JS('JSUInt31', r'(#.getUTCDate() + 0)', lazyAsJsDate(receiver))
          : JS('JSUInt31', r'(#.getDate() + 0)', lazyAsJsDate(receiver));
    }
  
    static getHours(DateTime receiver) {
      return (receiver.isUtc)
          ? JS('JSUInt31', r'(#.getUTCHours() + 0)', lazyAsJsDate(receiver))
          : JS('JSUInt31', r'(#.getHours() + 0)', lazyAsJsDate(receiver));
    }
  
    static getMinutes(DateTime receiver) {
      return (receiver.isUtc)
          ? JS('JSUInt31', r'(#.getUTCMinutes() + 0)', lazyAsJsDate(receiver))
          : JS('JSUInt31', r'(#.getMinutes() + 0)', lazyAsJsDate(receiver));
    }
  
    static getSeconds(DateTime receiver) {
      return (receiver.isUtc)
          ? JS('JSUInt31', r'(#.getUTCSeconds() + 0)', lazyAsJsDate(receiver))
          : JS('JSUInt31', r'(#.getSeconds() + 0)', lazyAsJsDate(receiver));
    }
  
    static getMilliseconds(DateTime receiver) {
      return (receiver.isUtc)
          ? JS(
  
negative.code:         : JS('JSUInt31', r'(#.getMilliseconds() + 0)', lazyAsJsDate(receiver));
    }
  
    @NoSideEffects()
    @NoThrows()
    @NoInline()
    static getWeekday(DateTime receiver) {
      int weekday = (receiver.isUtc)
          ? JS('int', r'#.getUTCDay() + 0', lazyAsJsDate(receiver))
  