日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php判断是否夏令时,关于php:时区和夏令时问题

發布時間:2023/12/20 php 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php判断是否夏令时,关于php:时区和夏令时问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我已經查看了SO上的其他解決方案,他們似乎都沒有在以下方面解決時區/ dst問題。

我正在調用NOAA Tide Prediction API和NOAA國家氣象服務API,要求通過時間范圍來檢索數據。 對于我的數據庫中的每個位置,我將時區作為UTC偏移量以及是否觀察到夏令時(1或0)。 我正在嘗試將某些日期(今天和明天)格式化為LST(本地標準時間)將在其自己的時區中,因此我可以傳遞給這些API。

我無法弄清楚如何知道日期(例如今天)是否在夏令時范圍內。

這是我到目前為止:

// Get name of timezone for tide station

// NOTE: $locationdata->timezone is something like"-5"

$tz_name = timezone_name_from_abbr("", $locationdata->timezone * 3600, false);

$dtz = new DateTimeZone($tz_name);

// Create time range

$start_time = new DateTime('', $dtz);

$end_time = new DateTime('', $dtz);

$end_time = $end_time->modify('+1 day');

// Modify time to match local timezone

$start_time->setTimezone($dtz);

$end_time->setTimezone($dtz);

// Adjust for daylight savings time

if( $locationdata->dst == '1' )

{

// DST is observed in this area.

// ** HOW DO I KNOW IF TODAY IS CURRENTLY DST OR NOT? **

}

// Make call to API using modified time range

...

我該怎么做呢? 謝謝。

您可以使用PHP的時間和日期函數:

$tzObj = timezone_open($tz_name);

$dateObj = date_create("07.03.2012 10:10:10", $tzObj);

$dst_active = date_format($dateObj,"I");

如果DST在給定日期處于活動狀態,則$dst_active為1,否則為0。

您可以傳遞"now"來接收當前日期和時間的值,而不是在date_create的調用中指定時間。

但是,如同喬恩所提到的,同一時區內的不同國家可以觀察到夏令時,而其他國家可能沒有。

但是,請注意這些問題。 bugs.php.net/bug.php?id=40743 bugs.php.net/bug?php?id=49914 bugs.php.net/bug.php?id=51051 bugs.php.net/bug.php?id = 51557 bugs.php.net/bug.php?id=52480 bugs.php.net/bug.php?id=54340 bugs.php.net/bug.php?id=54655 bugs.php.net/bug.php ?id = 55253 bugs.php.net/bug.php?id=60873 bugs.php.net/bug.php?id=60960 bugs.php.net/bug.php?id=61022 bugs.php.net/bug .php?id = 61311 bugs.php.net/bug.php?id=61530 bugs.php.net/bug.php?id=61955

^我的上帝.........

For each location in my database, I have the timezone as a UTC offset and whether daylight savings time is observed (either 1 or 0).

這還不夠信息。可以有多個時區都具有相同的標準偏移,都觀察到DST,但是在不同時間執行DST轉換。 (事實上??,從歷史上看,他們也可能會開始和停止觀察夏令時數年。)

基本上,您的數據庫應包含時區ID,而不是offset / DST-true-or-false。 (假設PHP使用zoneinfo時區數據庫,則時區ID類似于"Europe / London"。)

編輯:要查找給定DateTime的偏移量,可以調用getOffset,然后可以將其與標準時間偏移進行比較。但除非您擁有明確的時區ID,否則您將面臨錯誤區域的風險。

函數timezone_name_from_abbr("", $locationdata->timezone * 3600, false);從偏移量返回時區ID,因此-5可能會返回'America / New York`。

@cillosis:你是否依賴這種映射是準確的?因為它會含糊不清。雖然會編輯回答具體問題...

我確信會有歧義,但此刻我并不擔心。我更關心的是確定一個區域目前是否正在觀察夏令時。

@cillosis:很難知道如果你不知道你真正感興趣的是哪個區域......但正如我所說,你可以在DateTime上調用getOffset來查找。

您可以使用cron作業使tzdata(以及DST)定義保持最新,以便經常更新此PECL包:pecl.php.net/package/timezonedb

Cillosis,

我希望你不使用Java!我和時間一直在戰斗。我也使用天氣數據。我使用的大部分數據都是在本地標準時間內(忽略夏令時)。我還需要使用其他時區的時間,發現Java一直在讀取計算機的時區。我也一直在運行已棄用的課程。我提出了一個有效的解決方案。它有點像kluge,所以我有大量記錄,它只存在于一個函數中。我的解決方案是相對時間。我已將當地時間設置為UTC。我正在減去GMT偏移而不是添加它。我真的不關心實際的時間,我關心的是兩次之間的區別。它工作得很好。

祝好運

我正在使用PHP并最終實現了類似的解決方案。

總結

以上是生活随笔為你收集整理的php判断是否夏令时,关于php:时区和夏令时问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。