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

歡迎訪問 生活随笔!

生活随笔

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

php

php 跨区域,PHP跨时区的功能实现

發布時間:2023/12/10 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php 跨区域,PHP跨时区的功能实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在有一個跨時區的應用,不同時區登錄的用戶需要看到自己時區的時間,同時也要能夠進行時區的切換。

我的思路是,系統中所有存儲的時間都是GMT(UTC)時間,用戶登錄時,根據用戶所在的時區進行對應的顯示。

首先了解一下PHP中時區的設置方法。PHP中進行設置的方法比較靈活多樣,可以在php.ini中設置date.timezone屬性、可以通過代碼,調用ini_set(‘date.timezone’, ‘’)設置,也可以使用函數 date_default_timezone_set(),或者在htaccess文件中設置。

服務器的默認時區,如果設置的和我們希望的時區不符,而且我們也沒有權限修改全局的時區配置,就只有借助于代碼了。

PHP還提供了一個方便的函數,gmdate(),可以讓我們不用關心服務器的時區設置而始終獲得GMT時間,我的思路就是基于這個函數。

我的項目中使用了Codeigniter這個框架,框架中的date這個helper提供了幾個方便的函數,可以用來處理應用中的多時區情況。

其中 now() 始終返回的是gmt的當前時間;local_to_gmt() 可以將本地的時間轉換為gmt時間;gmt_to_local() 可以將gmt時間轉換為本地時間;

考慮一個典型的應用場景:

用戶登陸后,要顯示當前時間。這是我們可以使用now()獲得標準的gmt時間,然后使用gmt_to_local()函數轉化為用戶所在時區的時間。

用戶要發布一個時間。用戶發布了一個“2010-07-10 18:30:00”的時間,我們不能直接存入數據庫,必須先利用local_to_gmt() 轉化標準的gmt時間存入數據庫,這樣才能保證整個系統中的時間保持一致。

這兩個函數的細節,其實都是根據時區,然后進行相應的運算得來。計算的時候,也可以考慮夏令時,但是所在時區夏令時的開始和結束時間,則需要自己維護。

codeigniter中提供了一份較為完整的時區列表,timezone_menu() 可以顯示一個時區的下拉列表,但是這個列表中的時間不能完全對應到PHP自帶的時區顯示上,這是PHP本身的問題,不過可以通過下面這個函數,來讓輸入的每個時區,都可以獲得一個對應的時區文字顯示。

if( ! function_exists("tz_offset_to_name") )

{

/* Takes a GMT offset (in hours) and returns a timezone name */

function tz_offset_to_name($offset)

{

$offset *= 3600; // convert hour offset to seconds

$abbrarray = timezone_abbreviations_list();

foreach ($abbrarray as $abbr)

{

foreach ($abbr as $city)

{

if ($city['offset'] == $offset)

{

return $city['timezone_id'];

}

}

}

return FALSE;

}

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的php 跨区域,PHP跨时区的功能实现的全部內容,希望文章能夠幫你解決所遇到的問題。

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