anchor.diff:  
     static int getTimeZoneOffsetInMinutes(DateTime receiver) {
       // Note that JS and Dart disagree on the sign of the offset.
  -    return -JS('int', r'#.getTimezoneOffset()', lazyAsJsDate(receiver));
  -  }
  -
  -  static valueFromDecomposedDate(
  +    // 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);
  
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))
  