[Perl&PHP] time() and Class::Date 日期轉換運算
Nov 3rd, 2009 by appleboy 參觀者:3,265Views 機器人:170Views
為了看個 MLB 美國職棒,寫了一個網站:美國職棒影片收集站,裡面的內容影片連結,以及連結說明,都是利用 Perl 搭配 MySQL 資料庫,以及 CodeIgniter PHP Framework 寫出來的,美國 MLB 開打時間,會比台灣晚一天的時差,所以在 PHP 跟 Perl 都要針對時間作修改以及轉換運算,那底下會寫 PHP 跟 Perl 如何控制時間,還有資料庫如何設計,會比較適當。
PHP 日期轉換
MySQL 在資料庫時間格式方面,最主要常見的兩種儲存方式,一種就是 MySQL 預設 datetime,顯示的格式就會像是 2009-11-03 20:10:43,另一種就是存成 UNIX time 格式,可以設定為 int(11),這兩種其實都可以使用,在 phpBB2 是採用後者的方式,因為 open source 要支援多種資料庫,但是又要統一程式碼,所以乾脆用 UNIX 的時間標記,這樣比較好轉換時區,如果使用 UNIX 格式,可以利用 time() 函式來取的。
所以我們可以存放到 mysql 資料庫,利用 time() 來 INSERT,接下來如何顯示時間:date() 函式
如果資料庫格式用 datetime,那取出來的值必定是 Y-m-d H:i:s 格式,那如何轉成 UNIX time 呢,可以用 strtotime
結論是
1. 如果資料庫用 int(11),就利用 date(), mktime(), time() 轉換成時間格式
2. 如果資料庫用 datetime,就利用 strtotime() 轉換成 UNIX time 來做日期相加減
Perl 日期轉換
在 CPAN 裡面找到 Class-Date,裡面就有我想要的日期相加減,以及如何轉換到昨天前天格式,FreeBSD 請找到 devel/p5-Class-Date。
使用方法請參考底下:
$date = now; #同等於 $date = date(time);
# getting values of an absolute date object 取得物件內容
$date->year; # year, e.g: 2001
$date->_year; # year - 1900, e.g. 101
$date->yr; # 2-digit year 0-99, e.g 1
$date->mon; # month 1..12
$date->day; # day of month
$date->epoch; # UNIX time_t 取得 UNIX 時間
# 美國時間減一天
my $now = now - '1D';
my $now_day = sprintf("%04d-%02d-%02d", $now->year, $now->month, $now->mday);
my $now_month = sprintf("%04d-%02d", $now->year, $now->month);
Related View

感謝大大無私分享,
棒球網??
還我美女網站!!