/// <summary> /// Converts a JsInstance object to its CLR equivalence /// </summary> /// <param name="parameter">The object to convert</param> /// <returns>A CLR object</returns> public static object ConvertParameter(JsInstance parameter) { if (parameter == null) { return(null); } if (parameter.Class != JsFunction.TYPEOF && parameter.Class != JsArray.TYPEOF) { return(parameter.Value); } if (parameter == JsNull.Instance) { return(null); } if (parameter.IsClr) { return(parameter.Value); } var constructor = ((JsDictionaryObject)parameter)["constructor"] as JsFunction; if (constructor == null) { return(parameter); } switch (constructor.Name) { case "Date": return(JsDateConstructor.CreateDateTime(parameter.ToNumber())); case "String": case "RegExp": case "Number": return(parameter.Value); case "Array": case "Object": if (parameter.Class == JsFunction.TYPEOF) { return(parameter); } var array = new object[((JsObject)parameter).Length]; foreach (KeyValuePair <string, JsInstance> key in (JsObject)parameter) { int index; if (int.TryParse(key.Key, out index)) { array[index] = ConvertParameters(key.Value)[0]; } } return(new System.Collections.ArrayList(array)); default: return(parameter); } }
public JsInstance ToUTCStringImpl(JsDictionaryObject target, JsInstance[] parameters) { if (double.IsNaN(target.ToNumber())) { return((JsInstance)this.Global.StringClass.New(double.NaN.ToString())); } return((JsInstance)this.Global.StringClass.New(JsDateConstructor.CreateDateTime(target.ToNumber()).ToString(JsDate.FORMATUTC, (IFormatProvider)CultureInfo.InvariantCulture))); }
public JsInstance SetUTCDateImpl(JsDictionaryObject target, JsInstance[] parameters) { if (parameters.Length == 0) { throw new ArgumentException("There was no date specified"); } DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.AddDays((double)-dateTime.Day); dateTime = dateTime.AddDays(parameters[0].ToNumber()); target.Value = (object)dateTime; return((JsInstance)target); }
public JsInstance GetSecondsImpl(JsDictionaryObject target, JsInstance[] parameters) { if (double.IsNaN(target.ToNumber())) { return(this.Global.NaN); } JsNumberConstructor numberClass = this.Global.NumberClass; DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.ToLocalTime(); double second = (double)dateTime.Second; return((JsInstance)numberClass.New(second)); }
public JsInstance GetUTCHoursImpl(JsDictionaryObject target, JsInstance[] parameters) { if (double.IsNaN(target.ToNumber())) { return(this.Global.NaN); } JsNumberConstructor numberClass = this.Global.NumberClass; DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.ToUniversalTime(); double hour = (double)dateTime.Hour; return((JsInstance)numberClass.New(hour)); }
public JsInstance ToTimeStringImpl(JsDictionaryObject target, JsInstance[] parameters) { if (double.IsNaN(target.ToNumber())) { return((JsInstance)this.Global.StringClass.New(double.NaN.ToString())); } JsStringConstructor stringClass = this.Global.StringClass; DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.ToLocalTime(); string str = dateTime.ToString(JsDate.TIMEFORMAT, (IFormatProvider)CultureInfo.InvariantCulture); return((JsInstance)stringClass.New(str)); }
public JsInstance SetUTCMillisecondsImpl( JsDictionaryObject target, JsInstance[] parameters) { if (parameters.Length == 0) { throw new ArgumentException("There was no millisecond specified"); } DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.AddMilliseconds((double)-dateTime.Millisecond); dateTime = dateTime.AddMilliseconds(parameters[0].ToNumber()); target.Value = (object)this.New(dateTime).ToNumber(); return((JsInstance)target); }
public JsInstance ToLocaleDateStringImpl( JsDictionaryObject target, JsInstance[] parameters) { if (double.IsNaN(target.ToNumber())) { return((JsInstance)this.Global.StringClass.New(double.NaN.ToString())); } JsStringConstructor stringClass = this.Global.StringClass; DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.ToLocalTime(); string str = dateTime.ToString(JsDate.DATEFORMAT); return((JsInstance)stringClass.New(str)); }
public JsInstance SetFullYearImpl(JsDictionaryObject target, JsInstance[] parameters) { if (parameters.Length == 0) { throw new ArgumentException("There was no year specified"); } DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()).ToLocalTime(); int num = dateTime.Year - (int)parameters[0].ToNumber(); dateTime = dateTime.AddYears(-num); target.Value = (object)dateTime; if (parameters.Length > 1) { JsInstance[] parameters1 = new JsInstance[parameters.Length - 1]; parameters.CopyTo((Array)parameters1, 1); target = (JsDictionaryObject)this.SetMonthImpl(target, parameters1); } return((JsInstance)target); }
public JsInstance SetUTCMonthImpl(JsDictionaryObject target, JsInstance[] parameters) { if (parameters.Length == 0) { throw new ArgumentException("There was no month specified"); } DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()); dateTime = dateTime.AddMonths(-dateTime.Month); dateTime = dateTime.AddMonths((int)parameters[0].ToNumber()); target.Value = (object)dateTime; if (parameters.Length > 1) { JsInstance[] parameters1 = new JsInstance[parameters.Length - 1]; parameters.CopyTo((Array)parameters1, 1); target = (JsDictionaryObject)this.SetDateImpl(target, parameters1); } return((JsInstance)target); }
public JsInstance SetHoursImpl(JsDictionaryObject target, JsInstance[] parameters) { if (parameters.Length == 0) { throw new ArgumentException("There was no hour specified"); } DateTime dateTime = JsDateConstructor.CreateDateTime(target.ToNumber()).ToLocalTime(); dateTime = dateTime.AddHours((double)-dateTime.Hour); dateTime = dateTime.AddHours(parameters[0].ToNumber()); target.Value = (object)dateTime; if (parameters.Length > 1) { JsInstance[] parameters1 = new JsInstance[parameters.Length - 1]; parameters.CopyTo((Array)parameters1, 1); target = (JsDictionaryObject)this.SetMinutesImpl(target, parameters1); } return((JsInstance)target); }
public override object ToObject() { return(JsDateConstructor.CreateDateTime(value).ToLocalTime()); }
public override string ToString() { return(JsDateConstructor.CreateDateTime(value).ToLocalTime().ToString(FORMAT, CultureInfo.InvariantCulture)); }
public JsDate(double value, JsObject prototype) : this(JsDateConstructor.CreateDateTime(value), prototype) { }