public JsDate Construct(JsInstance[] parameters)
{
JsDate result = null;
if (parameters.Length == 1) {
if ((parameters[0].Class == JsInstance.CLASS_NUMBER || parameters[0].Class == JsInstance.CLASS_OBJECT) && double.IsNaN(parameters[0].ToNumber())) {
result = New(double.NaN);
}
else if (parameters[0].Class == JsInstance.CLASS_NUMBER)
{
result = New(parameters[0].ToNumber());
}
else {
double d;
if (ParseDate(parameters[0].ToString(), CultureInfo.InvariantCulture, out d)) {
result = New(d);
}
else if (ParseDate(parameters[0].ToString(), CultureInfo.CurrentCulture, out d)) {
result = New(d);
}
else {
result = New(0);
}
}
}
else if (parameters.Length > 1) {
DateTime d = new DateTime(0, DateTimeKind.Local);
if (parameters.Length > 0) {
int year = (int)parameters[0].ToNumber() - 1;
if (year < 100) {
year += 1900;
}
d = d.AddYears(year);
}
if (parameters.Length > 1) {
d = d.AddMonths((int)parameters[1].ToNumber());
}
if (parameters.Length > 2) {
d = d.AddDays((int)parameters[2].ToNumber() - 1);
}
if (parameters.Length > 3) {
d = d.AddHours((int)parameters[3].ToNumber());
}
if (parameters.Length > 4) {
d = d.AddMinutes((int)parameters[4].ToNumber());
}
if (parameters.Length > 5) {
d = d.AddSeconds((int)parameters[5].ToNumber());
}
if (parameters.Length > 6) {
d = d.AddMilliseconds((int)parameters[6].ToNumber());
}
result = New(d);
}
else {
result = New(DateTime.Now);
}
return result;
}