MySQL/MariaDB Функция для расчета времени восхода/заката в зависимости от даты и широты/долготы.
Эта реализация основана на алгоритме, найденном по адресу http://web.archive.org/web/20161202180207/http://williams.best.vwh.net/sunrise_sunset_algorithm.htm
Более мощный вариант можно найти в виде реализации функции MySQL нагрузкой в рамках LIB_MYSQLUDF_ASTRO.
Выполнить код Sunriseset.sql, например,
mysql -u <username> -p <yourdb> < SunRiseSet.sql
Позвоните по функции с датой, вашим местоположением и в какое время вы хотите вернуться (Sunrise, Sunset)
Параматер:
Дата процента-формат даты MySQL yyyy-mm-dd
Расположение широты - плавание
Расположение долготы - плавание
Положительно для восточного и негативного для Запада.
Зенит солнца для восхода солнца/заката: enum [«официальный», «гражданский», «морской», «астрономический»] или плавание
Желаемый результат - enum ['Sunrise', 'Sunset']
Замените широту 0,0000 и долготу 0,0000 на локальные настройки:
-- official sunset/sunrise
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 'official', 'sunset'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 'official', 'sunrise');
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 90+(50/60), 'sunset'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 90.833333333, 'sunrise');
-- civil
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 'civil', 'sunset'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 'civil', 'rise');
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 96, 'sunset'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 96, 'rise');
-- nautical
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 'nautical', 'set'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 'nautical', 'rise');
-- astronomical
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 'astro', 'sunset'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 'astro', 'sunrise');
-- self defined sun horizon level
SELECT system.SunRiseSet(NOW(), 0.0000, 0.0000, 86.2, 'sunset'), system.SunRiseSet(NOW(), 0.0000, 0.0000, 86.2, 'sunrise');