Función MySQL/MariadB para calcular el tiempo de sol/puesta de sol en la fecha y la latitud/longitud.
Esta implementación está basada en el algoritmo que se encuentra en http://web.archive.org/web/20161202180207/http://williams.best.vwh.net/sunrise_sunset_algorithm.htm
Se puede encontrar una variante más potente como una implementación de la función cargable MySQL bajo lib_mysqludf_astro.
Ejecutar el código de SunriseSet.sql, por ejemplo
mysql -u <username> -p <yourdb> < SunRiseSet.sql
Llame a la función con la fecha, su ubicación y a qué hora desea regresar (amanecer, atardecer)
Los paramater son:
Fecha de interés: formato de fecha mysql yyyy-mm-dd
Latitud de ubicación - flotante
Longitud de ubicación - flotante
Positivo para este y negativo para oeste.
Sun's Zenith para Sunrise/Sunset: Enum ['oficial', 'civil', 'náutico', 'astronómico'] o flotante
Resultado deseado - Enum ['Sunrise', 'Sunset']
Reemplace la latitud 0.0000 y la longitud 0.0000 con su configuración local:
-- 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');