static PhpValue GetSunTime(Context ctx, int timestamp, TimeFormats format, double latitude, double longitude, double zenith, double offset, bool getSunrise)
{
var zone = PhpTimeZone.GetCurrentTimeZone(ctx);
var utc = DateTimeUtils.UnixTimeStampToUtc(timestamp);
var local = TimeZoneInfo.ConvertTime(utc, zone);
if (Double.IsNaN(latitude) || Double.IsNaN(longitude) || Double.IsNaN(zenith))
{
//LibraryConfiguration config = LibraryConfiguration.GetLocal(ScriptContext.CurrentContext);
//if (Double.IsNaN(latitude))
// latitude = config.Date.Latitude;
//if (Double.IsNaN(longitude))
// longitude = config.Date.Longitude;
//if (Double.IsNaN(zenith))
// zenith = (getSunrise) ? config.Date.SunriseZenith : config.Date.SunsetZenith;
throw new NotImplementedException();
}
if (Double.IsNaN(offset))
offset = zone.GetUtcOffset(local).TotalHours;
double result_utc = CalculateSunTime(local.DayOfYear, latitude, longitude, zenith, getSunrise);
double result = result_utc + offset;
switch (format)
{
case TimeFormats.Integer:
return PhpValue.Create((timestamp - (timestamp % (24 * 3600))) + (int)(3600 * result));
case TimeFormats.String:
return PhpValue.Create(string.Format("{0:00}:{1:00}", (int)result, (int)(60 * (result - (double)(int)result))));
case TimeFormats.Double:
return PhpValue.Create(result);
default:
//PhpException.InvalidArgument("format");
//return PhpValue.Null;
throw new ArgumentException();
}
}