public override IObject Construct(IEnvironment environment, IArgs args) { var r = new NDate(environment); r.Class = "Date"; r.Extensible = true; r.Prototype = environment.DatePrototype; var argCount = args.Count; double timeValue = 0.0; if (argCount == 0) { timeValue = (DateTime.UtcNow - _utcStart).TotalMilliseconds; } else if (argCount == 1) { var value = args[0].ConvertToPrimitive(null); if (value.TypeCode == LanguageTypeCode.String) { timeValue = Parse(environment, args).ConvertToNumber().BaseValue; } else { timeValue = value.ConvertToNumber().BaseValue; } } else { var year = args[0].ConvertToNumber().ConvertToInteger().BaseValue; var month = args[1].ConvertToNumber().BaseValue; var date = argCount > 2 ? args[2].ConvertToNumber().BaseValue : 1.0; var hours = argCount > 3 ? args[3].ConvertToNumber().BaseValue : 0.0; var minutes = argCount > 4 ? args[4].ConvertToNumber().BaseValue : 0.0; var seconds = argCount > 5 ? args[5].ConvertToNumber().BaseValue : 0.0; var ms = argCount > 6 ? args[6].ConvertToNumber().BaseValue : 0.0; if (!double.IsNaN(year) && year >= 0.0 && year <= 99) { year = 1900.0 + year; } var dayPortion = PDate.MakeDay(year, month, date); var timePortion = PDate.MakeTime(hours, minutes, seconds, ms); var dateValue = PDate.MakeDate(dayPortion, timePortion); timeValue = PDate.TimeClip(PDate.UTC(dateValue)); } r.PrimitiveValue = environment.CreateNumber(PDate.TimeClip(timeValue)); return(r); }
internal static IDynamic Utc(IEnvironment environment, IArgs args) { var argCount = args.Count; var year = args[0].ConvertToNumber().ConvertToInteger().BaseValue; var month = args[1].ConvertToNumber().BaseValue; var date = argCount > 2 ? args[2].ConvertToNumber().BaseValue : 1.0; var hours = argCount > 3 ? args[3].ConvertToNumber().BaseValue : 0.0; var minutes = argCount > 4 ? args[4].ConvertToNumber().BaseValue : 0.0; var seconds = argCount > 5 ? args[5].ConvertToNumber().BaseValue : 0.0; var ms = argCount > 6 ? args[6].ConvertToNumber().BaseValue : 0.0; if (!double.IsNaN(year) && year >= 0.0 && year <= 99) { year = 1900.0 + year; } var dayPortion = PDate.MakeDay(year, month, date); var timePortion = PDate.MakeTime(hours, minutes, seconds, ms); var dateValue = PDate.MakeDate(dayPortion, timePortion); return(environment.CreateNumber(PDate.TimeClip(dateValue))); }