Browse Source

Allow entire .NET DateTime range for Date

Brian Beard 11 years ago
parent
commit
9fe1402663

+ 12 - 0
Jint.Tests/Runtime/EngineTests.cs

@@ -1073,5 +1073,17 @@ namespace Jint.Tests.Runtime
                 assert(isNaN(d));
             ");
         }
+
+        [Fact]
+        public void DateShouldAllowEntireDotNetDateRange()
+        {
+            var engine = new Engine();
+
+            var minValue = engine.Execute("new Date('0001-01-01T00:00:00.000')").GetCompletionValue().ToObject();
+            Assert.Equal(new DateTime(1, 1, 1, 0, 0, 0, DateTimeKind.Utc), minValue);
+
+            var maxValue = engine.Execute("new Date('9999-12-31T23:59:59.999')").GetCompletionValue().ToObject();
+            Assert.Equal(new DateTime(9999, 12, 31, 23, 59, 59, 999, DateTimeKind.Utc), maxValue);
+        }
     }
 }

+ 1 - 1
Jint/Native/Date/DateConstructor.cs

@@ -52,7 +52,7 @@ namespace Jint.Native.Date
                 "yyyy-MM-dd",
                 "yyyy-MM",
                 "yyyy"
-            }, CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out result))
+            }, CultureInfo.InvariantCulture, DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal, out result))
             {
                 if (!DateTime.TryParseExact(date, new[]
                 {

+ 2 - 2
Jint/Native/Date/DateInstance.cs

@@ -7,10 +7,10 @@ namespace Jint.Native.Date
     public class DateInstance : ObjectInstance
     {
         // Maximum allowed value to prevent DateTime overflow
-        internal static readonly double Max = (DateTime.MaxValue - new DateTime(170, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
+        internal static readonly double Max = (DateTime.MaxValue - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
 
         // Minimum allowed value to prevent DateTime overflow
-        internal static readonly double Min = -(new DateTime(170, 1, 1, 0, 0, 0, DateTimeKind.Utc) - DateTime.MinValue).TotalMilliseconds;
+        internal static readonly double Min = -(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc) - DateTime.MinValue).TotalMilliseconds;
 
         public DateInstance(Engine engine)
             : base(engine)