현재 위치: > 최신 기사 목록> date_sunset ()를 사용할 때 일반적인 오해

date_sunset ()를 사용할 때 일반적인 오해

M66 2025-05-31

PHP에서 date_sunset () 함수를 사용하여 일몰 시간을 계산할 때 개발자는 종종 눈에 띄지 않지만 중요한 문제를 겪습니다. 부정확하거나 무시한 시간대 구성으로 인해 계산 결과가 1 시간 이상 다른 일이 발생할 수 있으며, 시간 판단 (예 : 야간 조명 제어 시스템, 실외 활동 알림 등)에 따라 논리에 심각하게 영향을 미칩니다. 이 기사는이 기능의 시간대 원리를 파악하고 함정을 피하기 위해 올바르게 설정하는 방법을 보여줍니다.

1. date_sunset () 함수 소개

date_sunset () 은 PHP의 내장 기능으로 지정된 날짜, 위도 및 경도에 해당하는 일몰 시간을 반환합니다. 기본 구문은 다음과 같습니다.

 date_sunset(
    int $timestamp,
    int $format = 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 $gmt_offset = 0
): string|int|float|false

가장 중요한 매개 변수는 마지막 : $ gmt_offset , 즉 GMT와의 시차 입니다. 이것이 시간대를 설정하는 유일한 방법입니다.

2. 시간대 설정에서 일반적인 오해

많은 사람들이 PHP의 date_default_timezone_set () 함수를 사용하여 시간대를 설정하는 데 사용됩니다.

 date_default_timezone_set('Asia/Shanghai');

이 설정은 date ()strtotime () 과 같은 함수의 출력에 영향을 미치지 만 date_sunset () 의 결과에는 영향을 미치지 않습니다 ! 이것은 개발자가 무시하는 가장 쉬운 것입니다.

예제 오해 코드 :

 // 오류 데모
date_default_timezone_set('Asia/Shanghai');
echo date_sunset(time(), SUNFUNCS_RET_STRING, 31.2304, 121.4737); // 결과가있을 수 있습니다 GMT 시간

위의 코드는 상하이 시간대를 설정하지만 반환 된 일몰 시간은 여전히 ​​GMT 시간이므로 오류가 발생합니다.

3. 시간대를 올바르게 설정하는 방법

date_sunset ()을 현지 시간과 일치시키는 결과를 반환하려면 GMT 오프셋 값을 수동으로 몇 시간 안에 통과해야합니다 . 예를 들어, 중국 표준 시간이 GMT+8 인 경우 $ gmt_offset = 8.0을 설정해야합니다.

올바른 데모 코드 :

 date_default_timezone_set('Asia/Shanghai'); // 이 단계는 영향을 미치지 않습니다 date_sunset,그러나 여전히 통일 된 방식으로 설정하는 것이 좋습니다.

// 상하이:위도 31.2304, 경도 121.4737
$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 31.2304, 121.4737, 90.0, 8.0);
echo "상하이的日落시간为:$sunset";

출력 예 :

 상하이的日落시간为:18:45

수익은 현지 시간이며 더 이상 GMT가 아닙니다.

4. 현재 시간대 오프셋을 동적으로 얻습니다 (권장)

코드가 Dead Offset 값을 작성하는 대신 배포 서버의 시간대에 자동으로 적응하려면 다음을 수행 할 수 있습니다.

 $dt = new DateTime('now', new DateTimeZone(date_default_timezone_get()));
$gmtOffset = $dt->getOffset() / 3600; // 몇 초 만에 시간을 돌리십시오

$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, 31.2304, 121.4737, 90.0, $gmtOffset);
echo "当前时区下的日落시간为:$sunset";

이러한 방식으로, 다른 국가의 서버에 코드가 배포 되더라도 올바른 일몰 시간을 자동으로 계산할 수 있습니다.

5. 실제 응용 시나리오와 결합 : API 인터페이스 예제

사용자 도시의 일몰 시간을 반환하기 위해 인터페이스를 제공하고 싶다고 가정하면 반품 결과는 다음과 같습니다.

 {
    "city": "상하이",
    "sunset": "18:45"
}

다음 인터페이스 로직을 빌드 할 수 있습니다 (주소는 균일하게 m66.net 입니다) :

 // 샘플 인터페이스 주소:https://api.m66.net/sunset.php?lat=31.2304&lng=121.4737

$lat = $_GET['lat'] ?? 31.2304;
$lng = $_GET['lng'] ?? 121.4737;

$dt = new DateTime('now', new DateTimeZone(date_default_timezone_get()));
$gmtOffset = $dt->getOffset() / 3600;

$sunset = date_sunset(time(), SUNFUNCS_RET_STRING, $lat, $lng, 90.0, $gmtOffset);

echo json_encode([
    "city" => "상하이",
    "sunset" => $sunset
]);

6. 요약

  • date_sunset ()은 PHP의 기본 시간대를 자동으로 사용하지 않습니다.

  • $ gmt_offset 매개 변수는 몇 시간 안에 수동으로 전달되어야합니다.

  • 코드 적응성을 향상시키기 위해 현재 오프셋 값을 동적으로 계산하는 것이 좋습니다.

  • 비즈니스 로직 오류를 피하기 위해 GMT를 현지 시간으로 전환하는 데주의를 기울이십시오.

태양의 위치와 관련된 기능을 처리 할 때 시간 정확도는 비즈니스 정확도와 같습니다 . 한 시간의 작은 편차가 시스템 논리를 망치게하지 마십시오.