コード例 #1
0
ファイル: CDate.cs プロジェクト: bittercoder/Machete
        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);
        }
コード例 #2
0
ファイル: CDate.cs プロジェクト: bittercoder/Machete
        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)));
        }