date_sunset()
Scopri come funzionava date_sunset() in PHP 7.x, perché è stata rimossa in PHP 8.1 e come ottenere gli orari del tramonto in PHP moderno.
Introduzione
date_sunset() è una funzione PHP legacy che restituisce l'orario del tramonto per una data e una posizione geografica specificate. Questa pagina spiega cosa restituiva, come funzionavano i suoi parametri, perché è stata rimossa dal PHP moderno e cosa usare al suo posto. Se stai scrivendo nuovo codice, passa direttamente a Migrazione al PHP moderno — ma comprendere la firma originale è comunque utile quando si mantengono codebase più datate.
date_sunset() è stata deprecata in PHP 8.0 e rimossa in PHP 8.1. Genererà un Error ("Call to undefined function") su qualsiasi runtime PHP attuale. Usala solo per mantenere codice PHP 7.x legacy; per qualsiasi cosa nuova, usa una libreria o una API esterna.
Cosa fa date_sunset()
date_sunset() calcolava il momento in cui il sole scendeva sotto l'orizzonte per una data specifica e un punto specifico sulla Terra. Richiedeva quattro informazioni:
- Una data, fornita come timestamp Unix.
- Una latitudine e una longitudine che identificano la posizione dell'osservatore.
- Un angolo zenitale — l'angolo, misurato verso il basso rispetto alla verticale, a cui il sole è considerato "tramontato." Il valore predefinito
90.83°è leggermente superiore a un angolo retto perché compensa la rifrazione atmosferica (che piega la luce solare e fa apparire il sole più in alto di quanto sia realmente) e il raggio apparente del disco solare.
Per impostazione predefinita, la funzione restituiva una string come "18:12", ma con il flag corretto poteva restituire il risultato come timestamp Unix, che si può poi formattare con date() o convertire con qualsiasi altra funzione data.
Sintassi
date_sunset(
int $timestamp,
int $returnFormat = SUNFUNCS_RET_STRING,
float $latitude = ini_get("date.default_latitude"),
float $longitude = ini_get("date.default_longitude"),
float $zenith = ini_get("date.sunset_zenith"),
float $utcOffset = 0
): mixedParametri
- timestamp — Il timestamp Unix del giorno per cui calcolare il tramonto. Costruiscilo con
strtotime()omktime(). - returnFormat — Una delle tre costanti che controllano il tipo restituito:
SUNFUNCS_RET_STRING— una string"HH:MM"(predefinita).SUNFUNCS_RET_DOUBLE— l'orario come ore dalla mezzanotte (un float, es.18.2).SUNFUNCS_RET_TIMESTAMP— un timestamp Unix.
- latitude — La latitudine dell'osservatore in gradi (positivo = nord).
- longitude — La longitudine dell'osservatore in gradi (positivo = est, negativo = ovest).
- zenith — L'angolo zenitale del sole al tramonto; predefinito a
90.83°. - utcOffset — L'offset dall'UTC in ore; ignorato quando
returnFormatè un timestamp.
La funzione restituiva false per le posizioni e le date in cui il sole non tramonta mai o non sorge mai (ad esempio, i poli in estate o in inverno).
Esempio (PHP 7.x legacy)
Il seguente codice funziona su PHP 7.x o precedente, dove la funzione esiste ancora:
Output:
Sunset on March 3, 2023 in San Francisco was at 18:12Poiché il risultato è un timestamp, puoi riformattarlo come preferisci — date("g:i A", $sunset) stamperebbe 6:12 PM invece.
Migrazione al PHP moderno
date_sunset() non esiste più, e la classe DateTime integrata in PHP gestisce i fusi orari e la formattazione, ma non calcola le posizioni solari. Quindi un'app moderna ha due opzioni pratiche.
Opzione 1 — Chiamare una API sunrise/sunset
L'approccio portatile più semplice è interrogare un servizio pubblico e leggere il timestamp restituito. Funziona su qualsiasi versione di PHP e non richiede calcoli da parte tua:
<?php
// Free, no-key API: https://sunrise-sunset.org/api
$lat = 37.7749;
$lng = -122.4194;
$date = '2023-03-03';
$url = "https://api.sunrise-sunset.org/json?lat={$lat}&lng={$lng}&date={$date}&formatted=0";
$response = json_decode(file_get_contents($url), true);
// The API returns ISO-8601 UTC strings
$sunsetUtc = new DateTime($response['results']['sunset']);
$sunsetUtc->setTimezone(new DateTimeZone('America/Los_Angeles'));
echo "Sunset: " . $sunsetUtc->format('H:i');
?>Opzione 2 — Usare una libreria di astronomia
Per un calcolo offline e autonomo, installa un pacchetto Composer mantenuto che implementa lo stesso algoritmo del tramonto (cerca su Packagist "sunrise sunset"; le scelte più popolari includono tienvx/php-sunrise-sunset e andreas-glaser/php-sun-info). I nomi esatti delle classi dipendono dal pacchetto, quindi controlla sempre il suo README — la struttura generale è: costruire un calcolatore a partire da latitudine/longitudine, poi chiedere il tramonto per una data specificata.
Dove vengono utilizzati gli orari del tramonto
Che tu chiami date_sunset() (legacy) o una delle moderne alternative sopra descritte, i dati sul tramonto compaiono in molti tipi di applicazioni:
- App meteo — mostrano il tramonto della giornata insieme alle previsioni per una posizione.
- App fotografiche — calcolano la "golden hour," il periodo poco prima del tramonto in cui la luce è morbida e calda, sottraendo un'ora dall'orario del tramonto.
- App per eventi e pianificazione — segnalano eventi all'aperto che si protraggono fino al crepuscolo, o passano a un tema scuro del sito dopo il tramonto.
- Smart home e illuminazione — attivano luci o routine all'orario del tramonto locale.
Abbina l'orario del tramonto a date_sunrise() per ottenere la finestra completa di luce diurna per una posizione.
Conclusione
date_sunset() era un modo comodo con una sola chiamata per ottenere gli orari del tramonto in PHP 7.x, ma è stata rimossa in PHP 8.1 e fallirà su qualsiasi runtime moderno. Per il nuovo codice, chiama una API sunrise/sunset oppure usa una libreria di astronomia mantenuta, e formatta il risultato con la classe DateTime. I casi d'uso — meteo, fotografia, eventi, automazione — non sono cambiati; solo la sorgente del calcolo si è spostata fuori dal core di PHP.