PHP Velho Oeste 2024

date_sunset

(PHP 5, PHP 7, PHP 8)

date_sunset Retorna a hora do pôr do sol para um dia e uma localização informados.

Aviso

Esta função foi DESCONTINUADA desde o PHP 8.1.0. Confiar nesta função é altamente desencorajado. Use date_sun_info() no lugar.

Descrição

date_sunset(
    int $timestamp,
    int $returnFormat = SUNFUNCS_RET_STRING,
    ?float $latitude = null,
    ?float $longitude = null,
    ?float $zenith = null,
    ?float $utcOffset = null
): string|int|float|false

A função date_sunset() retorna o horário do pôr do sol para um dia (especificado como um timestamp) e uma localização informados.

Parâmetros

timestamp

O timestamp do dia do pôr do sol desejado.

returnFormat

Constantes de returnFormat
Constante Descrição Exemplo
SUNFUNCS_RET_STRING Retorna o resultado como uma string 16:46
SUNFUNCS_RET_DOUBLE Retorna o resultado como um float 16.78243132
SUNFUNCS_RET_TIMESTAMP Retorna o resultado como um int (timestamp) 1095034606

latitude

Padronizado para o leste, passe um valor negativado para o oeste. Veja também: date.default_latitude

longitude

Padronizado para o leste, passe um valor negativado para o oeste. Veja também: date.default_longitude

zenith

zenith é o ângulo entre o centro do sol e uma linha perpendicular à superfície da Terra. É padronizado para date.sunset_zenith

Ângulos comuns em relação ao zenith
Ângulo Descrição
90°50' Pôr do sol: o ponto onde o sol se torna invisível.
96° Crepúsculo civil: convencionado para significar o final do crepúsculo.
102° Crepúsculo náutico: o ponto no qual o horizonte termina de ficar visível no mar.
108° Crepúsculo astronômico: o ponto no qual o sol termina se tornar fonte de iluminação.

utcOffset

Especificado em horas. O parâmetro utcOffset é ignorado se returnFormat for SUNFUNCS_RET_TIMESTAMP.

Valor Retornado

Retorna o horário do pôr do sol no returnFormat especificado em caso de sucesso ou false em caso de falha. Um potencial motivo para falha é quando o sol não se põe, o que acontece dentro dos círculos polares durante parte do ano.

Erros/Exceções

Toda chamada a uma função de data/hora gerará um E_WARNING se o fuso horário não for válido. Veja também date_default_timezone_set()

Registro de Alterações

Versão Descrição
8.1.0 Esta função foi descontinuada em favor de date_sun_info().
8.0.0 latitude, longitude, zenith e utcOffset agora podem ser nulos.

Exemplos

Exemplo #1 Exemplo da função date_sunset()

<?php

/* Calcula o horário do pôr do sol para Lisboa, Portugal
Latitude: 38.4 norte
Longitude: 9 oeste
Zênite ~= 90
deslocamento UTC: +01:00 GMT
*/

echo date("D M d Y"). ', horário do pôr do sol : ' .date_sunset(time(), SUNFUNCS_RET_STRING, 38.4, -9, 90, 1);

?>

O exemplo acima produzirá algo semelhante a:

Mon Dec 20 2004, horário do pôr do sol : 18:13

Exemplo #2 Sem pôr do sol

<?php
$solstice
= strtotime('2017-12-21');
var_dump(date_sunset($solstice, SUNFUNCS_RET_STRING, 69.245833, -53.537222));
?>

O exemplo acima produzirá:

bool(false)

Veja Também

  • date_sun_info() - Retorna um array com informações sobre pôr/nascer do sol e o início/fim do dia

add a note add a note

User Contributed Notes 3 notes

up
1
matt at mctsoft dot net
4 years ago
yes SUNFUNCS_RET_TIMESTAMP does return GMT(0) time

so something like...

$arr = localtime(date_sunset(time(),SUNFUNCS_RET_TIMESTAMP,51.5,0)); // London

$hh = $arr[2];
$mm = $arr[1];

Will give figure out your localtime and daylight saving (BST)
up
-1
nospam at nomail dot com
6 years ago
maybe I am wrong, but I think

SUNFUNCS_RET_TIMESTAMP     return GMT(0) time

SUNFUNCS_RET_STRING     Return local time
SUNFUNCS_RET_DOUBLE     Return local time
up
-25
michael at dayah dot com
17 years ago
I use an IP to location database to determine the visitor's approximate latitude and longitude and then serve them a day or night color scheme based on whether it is before civil dawn or dusk. I've had problems when not specifying the timezone, specifically a 1 hour error, so I use GMT.

<?php
date_default_timezone_set
("GMT");

function
scheme() {
       
$sunrise = date_sunrise(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 96, 0);
       
$sunset = date_sunset(time(), SUNFUNCS_RET_DOUBLE, $latitude, $longitude, 96, 0);
       
$now = date("H") + date("i") / 60 + date("s") / 3600;

        if (
$sunrise < $sunset)
                if ((
$now > $sunrise) && ($now < $sunset)) return "day";
                else return
"night";
        else
                if ((
$now > $sunrise) || ($now < $sunset)) return "day";
                else return
"night";
}
?>
To Top