2021-05-22

【PHP】以個體導向(物件導向) 方式進行日期的運算

 

 
// 設定時區
date_default_timezone_set('Asia/Taipei');


// 建立 日期時間個體(物件)
$date = new DateTime();    // 未帶參數時, 就是現在

$date = new DateTime('2000-01-01');    // 帶參數, 就是指定日期
                                       // 沒有時間參數, 就是 00:00:00
                                       // 以下同此例
                                       // 老人家較關心日期,所以就不管時間了!   XD

// 日期往後(日期時間的加法)
echo '方法一:加 10 月';
$date->add(new DateInterval('P10M'));	// P 表 period, M 表 "月"
echo $date->format('Y-m-d') . "\n";	// 格式化顯示 西元 年-月-日, 相當於 date() 函式


echo '方法二:加 2 天';
$date->modify('+2 day');
echo $date->format('Y-m-d') . "\n";


// 日期往前(日期時間的減法)
echo '方法一:減 8 月 10 天';
$date->sub(new DateInterval('P8M10D'));
echo $date->format('Y-m-d') . "\n";

echo '方法二:減 2 天';
$date->modify('-2 day');
echo $date->format('Y-m-d') . "\n";


echo '當月 1 日';
$date->modify('first day of');
echo $date->format('Y-m-d') . "\n";


echo '當月月底';
$date->modify('last day of');
echo $date->format('Y-m-d') . "\n";


echo '前一天';
$date->modify('yesterday');
echo $date->format('Y-m-d') . "\n";


echo '後一天';
$date->modify('tomorrow');
echo $date->format('Y-m-d') . "\n";


echo '查 2000-01-01 是星期幾';
$dayOfWeek = $date->format('w');
echo "dayOfWeek = $dayOfWeek\n";    // 6, 星期日 = 0, 星期一 = 1, ...


echo "當週的星期日";
$sunday = $date->modify("-$dayOfWeek day");
echo "sunday = ".$sunday->format('Y-m-d')."\n";


echo '當月第一個週一';
$date->modify('first mon of');    // 大小寫無差, 完整寫法 monday 也行
echo $date->format('Y-m-d') . "\n";


echo '當月最後一個週六';
$date->modify('last sat of');
echo $date->format('Y-m-d') . "\n";


echo '移至離當日最近的下個週四';
$date->modify('thursday');
echo $date->format('Y-m-d') . "\n";


echo '移至下個週五';
$date->modify('fri');  // 因為隔天就是週五, 所以只移了 1 天
echo $date->format('Y-m-d') . "\n";


echo '移至下個週三';
$date->modify('wed');
echo $date->format('Y-m-d') . "\n";


echo '移至下個月';
$date->modify('next month');    // 似乎無法搭配 day, ex: next day
                                // 也不能搭數字, ex: next 2 month
echo $date->format('Y-m-d') . "\n";

// 前一年的年初(第一天)
$date->modify('first day of january last year');

// 前一年的年底(最後一天)
$date->modify('last day of december last year');


// 日期的複製
// 不能直接宣告一個新的變數, 這樣有點類似 "指標"
$date2 = $date    // 這樣其實是將 $date2 指向 $date
                  // 要將 $date2 看做是 $date 的別名
// 當變更了 $date2 的值, 其實是變更 $date

// 應該要
$date2 = new DateTime($date->format('Y-m-d')); 
 

 

 

關於上述例子中,簡單英文日期時間的參數格式,可以參考 Relative Formats

 

沒有留言:

張貼留言