mirror of
https://github.com/dart-lang/sdk
synced 2024-11-02 15:17:07 +00:00
[ddc] Copy JS 2-digit year handling from dart2js.
Fixes https://github.com/dart-lang/sdk/issues/42894 Change-Id: I68a8782d123c299ec34bfd0a31b3108138dac117 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/164681 Reviewed-by: Riley Porter <rileyporter@google.com> Reviewed-by: Nicholas Shahan <nshahan@google.com> Commit-Queue: Riley Porter <rileyporter@google.com>
This commit is contained in:
parent
22c3d24f77
commit
febb1929cd
3 changed files with 40 additions and 0 deletions
|
@ -354,6 +354,14 @@ class Primitives {
|
|||
@nullCheck bool isUtc) {
|
||||
final int MAX_MILLISECONDS_SINCE_EPOCH = 8640000000000000;
|
||||
var jsMonth = month - 1;
|
||||
// The JavaScript Date constructor 'corrects' year NN to 19NN. Sidestep that
|
||||
// correction by adjusting years out of that range and compensating with an
|
||||
// adjustment of months. This hack should not be sensitive to leap years but
|
||||
// use 400 just in case.
|
||||
if (0 <= years && years < 100) {
|
||||
years += 400;
|
||||
jsMonth -= 400 * 12;
|
||||
}
|
||||
int value;
|
||||
if (isUtc) {
|
||||
value = JS<int>('!', r'Date.UTC(#, #, #, #, #, #, #)', years, jsMonth,
|
||||
|
|
16
tests/corelib/date_time_js_modified_test.dart
Normal file
16
tests/corelib/date_time_js_modified_test.dart
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import "package:expect/expect.dart";
|
||||
|
||||
// The JavaScript Date constructor 'corrects' 2-digit years NN to 19NN.
|
||||
// Verify that a DateTime with year 1 is created correctly.
|
||||
// Regression test for https://github.com/dart-lang/sdk/issues/42894
|
||||
|
||||
main() {
|
||||
var d = new DateTime(1, 0, 1, 0, 0, 0, 0);
|
||||
var d2 = new DateTime(0, 12, 1, 0, 0, 0, 0);
|
||||
|
||||
Expect.equals(d, d2);
|
||||
}
|
16
tests/corelib_2/date_time_js_modified_test.dart
Normal file
16
tests/corelib_2/date_time_js_modified_test.dart
Normal file
|
@ -0,0 +1,16 @@
|
|||
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
|
||||
// for details. All rights reserved. Use of this source code is governed by a
|
||||
// BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
import "package:expect/expect.dart";
|
||||
|
||||
// The JavaScript Date constructor 'corrects' 2-digit years NN to 19NN.
|
||||
// Verify that a DateTime with year 1 is created correctly.
|
||||
// Regression test for https://github.com/dart-lang/sdk/issues/42894
|
||||
|
||||
main() {
|
||||
var d = new DateTime(1, 0, 1, 0, 0, 0, 0);
|
||||
var d2 = new DateTime(0, 12, 1, 0, 0, 0, 0);
|
||||
|
||||
Expect.equals(d, d2);
|
||||
}
|
Loading…
Reference in a new issue