Saltar al contenido
🛠️ToolsShed

Golden Hour Calculator

Encuentra ventanas de hora dorada y hora azul para fotografía basadas en tu ubicación y fecha.

Acerca de esta herramienta

La hora dorada es el breve intervalo posterior al amanecer y previo al atardecer en que el sol está bajo y baña todo con una luz cálida y suave, mientras que la hora azul es el crepúsculo más profundo antes del amanecer y después del atardecer, que llena el cielo de tonos azules uniformes y fríos. Ambas son muy apreciadas por los fotógrafos porque producen imágenes favorecedoras y llenas de atmósfera que la dura luz del mediodía no puede igualar. Esta calculadora usa fórmulas astronómicas para determinar con precisión cuándo se abren y se cierran esas ventanas en cualquier fecha y lugar.

Para usarla, introduce tu fecha y tu ubicación, y la herramienta mostrará las horas de inicio y fin de la hora dorada y la hora azul en torno al amanecer y al atardecer. Está pensada para fotógrafos, videógrafos y viajeros que desean planificar una sesión al minuto y llegar mientras la luz sigue siendo perfecta.

Ten en cuenta que estos horarios cambian de forma notable según la estación y tu latitud, así que comprueba siempre los datos de tu fecha exacta en lugar de fiarte de una estimación aproximada. Todo se calcula localmente en tu navegador, por lo que ningún dato de ubicación sale nunca de tu dispositivo.

Preguntas Frecuentes

Implementación de Código

import math
from datetime import datetime, timedelta, timezone

def sun_times(lat: float, lon: float, date: datetime) -> dict:
    """Calculate sunrise, sunset and golden hour times."""
    # Day of year
    N = date.timetuple().tm_yday

    # Mean longitude and anomaly
    L = (280.460 + 0.9856474 * N) % 360
    g = math.radians((357.528 + 0.9856003 * N) % 360)

    # Ecliptic longitude
    lam = math.radians(L + 1.915 * math.sin(g) + 0.020 * math.sin(2 * g))

    # Declination
    decl = math.asin(math.sin(math.radians(23.439)) * math.sin(lam))

    # Hour angle for sunrise/sunset (sun altitude = -0.833°)
    cos_ha = (math.sin(math.radians(-0.833)) - math.sin(math.radians(lat)) * math.sin(decl)) /              (math.cos(math.radians(lat)) * math.cos(decl))

    if abs(cos_ha) > 1:
        return {"error": "Midnight sun or polar night"}

    ha = math.degrees(math.acos(cos_ha))

    # Equation of time correction (simplified)
    B = math.radians(360 / 365 * (N - 81))
    eot = 9.87 * math.sin(2 * B) - 7.53 * math.cos(B) - 1.5 * math.sin(B)

    # Solar noon in minutes from midnight UTC
    solar_noon = 720 - 4 * lon - eot

    sunrise_min = solar_noon - 4 * ha
    sunset_min  = solar_noon + 4 * ha

    # Golden hour bounds: sun at 6° above horizon
    cos_gh = (math.sin(math.radians(6)) - math.sin(math.radians(lat)) * math.sin(decl)) /              (math.cos(math.radians(lat)) * math.cos(decl))
    gh_ha = math.degrees(math.acos(max(-1, min(1, cos_gh))))

    golden_end_morn = solar_noon - 4 * gh_ha
    golden_start_eve = solar_noon + 4 * gh_ha

    def mins_to_str(m):
        h, mn = divmod(int(m), 60)
        return f"{h:02d}:{mn:02d}"

    return {
        "sunrise": mins_to_str(sunrise_min),
        "golden_hour_morning_end": mins_to_str(golden_end_morn),
        "solar_noon": mins_to_str(solar_noon),
        "golden_hour_evening_start": mins_to_str(golden_start_eve),
        "sunset": mins_to_str(sunset_min),
    }

# New York City
result = sun_times(40.7128, -74.0060, datetime(2024, 6, 21))
for k, v in result.items():
    print(f"{k}: {v}")

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.