дата восхода солнца — PHP date_sunrise и date_sun_info дают разные результаты

У меня есть веб-сайт веб-камеры, и я хотел показать время восхода солнца для фактического дня. Поэтому я использовал для этого функцию date_sunrise в PHP. В дополнение к координатам он принимает значение зенита солнца в качестве входных данных.

Я узнал, что правильный зенит для восхода солнца — 90,8333. 90 будет теоретическим углом к ​​центру Солнца (то есть на горизонте). Для учета диаметра солнца и преломления добавляется 0,8333 (16 угловых минут + 34 угловых минуты, деленных на 60).

Но я заметил, что этот вход дал другое время восхода, чем на других сайтах. Наиболее достоверным источником должен быть Отдел астрономических применений Военно-морской обсерватории США. Увидеть их онлайн калькулятор и читать описание их метода. Утверждается, что они также используют значение зенита 90,8333 для расчета восхода солнца.

Затем я обнаружил, что функция php date_sun_info, которая является массивом, содержащим различные данные, дает правильное время восхода (соответствующее результатам AAD).

Чтобы достичь того же времени восхода из функции date_sunrise, мне нужно ввести значение зенита около 90,5.

Почему date_sunrise с zenith = 90.8333 не дает такой же результат, как date_sun_info?

4

Решение

В соответствии с http://php.net/manual/en/function.date-sunrise.php параметр Zenith по умолчанию берется из файла конфигурации (см. ini_get ())

.Ini речь идет о php.ini из вашей установки PHP. Он имеет следующие строки (они здесь закомментированы, но используются по умолчанию, если не перезаписаны в INI-файле).

; http://php.net/date.sunrise-zenith
;date.sunrise_zenith = 90.583333

; http://php.net/date.sunset-zenith
;date.sunset_zenith = 90.583333

Поэтому, если вы перейдете к файлу php.ini и удалите точку с запятой, вы можете перезаписать значения по умолчанию для восхода / установки зенита так, как вам удобно. В вашем случае «90,8333».

Что касается разницы, «sun_info» принимает аргументы координат времени, долготы и широты. Так что это может иметь более точную базу данных где-то, а не использовать значение по умолчанию, установленное в конфигурации.

Рекомендации:

4

Другие решения

Почему date_sunrise с zenith = 90.8333 не дает такой же результат, как date_sun_info?

Хороший вопрос. Пойдемте к источнику. date_sunrise рассчитывает высоту как функция зенита:

altitude = 90 - zenith;

в то время как date_sun_info вычисляет высоту как константа:

-35.0/60

Что означает высота над уровнем моря, и как изменение этого значения влияет на результат? Что ж, перекрестная ссылка на timelib_astro_rise_set_altitude, который является вызовом библиотеки как date_sunrise а также date_sun_info использовать, мы видим:

 *       altit = the altitude which the Sun should cross
*               Set to -35/60 degrees for rise/set, -6 degrees
*               for civil, -12 degrees for nautical and -18
*               degrees for astronomical twilight.

Теперь просмотрите этот код и обратите внимание, что это просто Обобщенное уравнение восхода и постоянная -35.0/60 соответствует центру солнечного диска (-0,83 ° или около -50 угловых минут). Таким образом, использование константы здесь имеет смысл, так как является частью обобщенного уравнения, которое использует USNO AAD.

Вопрос сейчас в том, почему date_sunrise рассчитать высоту как функцию зенита? Давайте заметим две вещи. Во-первых, если мы поставляем зенит 90.583333тогда расчет 90 - 90.583333 дает точно такую ​​же константу -35/60 == -.583333 что мы видели ранее, объясняя, почему использование этого конкретного значения дает вам такие же результаты. Во-вторых, это 90 - zenith это солнечный угол места а также горизонтальный параллакс. Взяв эти записи вместе, я предполагаю, что вычитание объясняет форму сплющенного сфероида Земли более точно, чем постоянная. Однако мне не ясно, что обобщенное уравнение допускает это.

Поэтому я бы рекомендовал использовать date_sun_info для расчетов, где вам нужно согласованность с другими источниками.

3

Однако есть и разница, когда дело доходит до сумерек, и я не вижу существенной разницы в исходном коде между ними. Сумерки определяются как момент, когда геометрический центр Солнца проходит под углом 6/12/18 градусов под горизонтом, поэтому солнечный диск не должен учитываться. И sun_info, и восход солнца используют -6.0 для высоты, но результаты немного отличаются.

0
По вопросам рекламы [email protected]