寫程式時,時間的使用是頻率很高的事情,簡單的像是拿取現在的時間、timestamp,稍微複雜的像是計算兩個時間的差距,今天來探討一些常見的例子
- 現在的時間
- 現在的 timestamp
- 將時間轉換為 timestamp
- 從 timestamp 取得時間
- 格式化時間
- 時間位移
- 時間差異
PHP
<?php // 現在的時間 // PHP 沒有函式可以直接印出現在的值,一般都是用 date 加上需要的格式 echo date('Y-m-d H:i:s'), PHP_EOL; // 2018-04-20 10:03:22 // 現在的 timestamp echo time(), PHP_EOL; // 1524189866 // 將時間轉換為 timestamp echo strtotime('2018-04-20'), PHP_EOL; // 1524153600 // 從 timestamp 取得時間 echo date('Y-m-d H:i:s', 1524153600), PHP_EOL; // 2018-04-20 00:00:00 // 格式化時間 // 基本上就是使用 date 再去指定內容,常見的就是 Ymd His // 其他的部份可以參考 http://php.net/date // 時間位移 // 範例為 2018-04-20 12:00:00,往前移動一天又一小時 $datetimeString = '2018-04-20 12:00:00'; $datetime = date('Y-m-d H:i:s', strtotime($datetimeString)); echo $datetime, PHP_EOL; // 2018-04-20 12:00:00 // strtotime 很強大,其他應用可以參考 http://php.net/strtotime $datetime = date('Y-m-d H:i:s', strtotime('-1 day -1 hour', strtotime($datetimeString))); echo $datetime, PHP_EOL; // 2018-04-19 11:00:00 // 時間差異 // 基本上就是轉 timestamp 再去換算 $dateBegin = '2018-04-19'; $dateEnd = '2018-04-20'; echo strtotime($dateEnd) - strtotime($dateBegin), PHP_EOL; // 86400
Python
python 常用的方法有 time
跟 datetime
,接下來的範例用 datetime
直接做掉
# -*- coding: utf-8 -*- import datetime # 現在的時間 print(datetime.datetime.now()) # 2018-04-20 10:18:19.916229 # 現在的 timestamp print(datetime.datetime.now().strftime('%s')) # 1524190730 # 將時間轉換為 timestamp print(datetime.datetime(2018, 4, 20).strftime('%s')) # 1524153600 # 從 timestamp 取得時間 print(datetime.datetime.fromtimestamp(1524153600)) # 2018-04-20 00:00:00 # 格式化時間 # 其他文字格式可以參考 http://tinyurl.com/ydz294lw print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')) #2018-04-20 10:23:30 # 時間位移 datetime_string = '2018-04-20 12:00:00' convert_datetime = datetime.datetime.strptime(datetime_string, '%Y-%m-%d %H:%M:%S') print(convert_datetime) # 2018-04-20 12:00:00 # timedelta 很強大,其他可以參考 http://tinyurl.com/yc83qt4h convert_datetime = convert_datetime - datetime.timedelta(days=1, hours=1) print(convert_datetime) # 2018-04-19 11:00:00 # 時間差異 date_begin = '2018-04-19' date_end = '2018-04-20' begin = int(datetime.datetime.strptime(date_begin, '%Y-%m-%d').strftime('%s')) end = int(datetime.datetime.strptime(date_end, '%Y-%m-%d').strftime('%s')) print(end - begin) # 86400
Node.js
坦白說,如果你從網路上查詢 nodejs 或 jsavascript 對時間的控制大部分的人都會推薦你去使用套件,像是 moment.js,因為 JS 對時間的控制沒有那麼直覺跟友善,要花很多功夫才能達成,但我們今天就是研究 native 的東西,我們就用 native 的方法來完成
// 現在的時間 let date = new Date(); console.log(date.toString()); // Fri Apr 20 2018 11:32:22 GMT+0800 // 現在的 timestamp console.log(date.getTime()); // 1524192512090 // 將時間轉換為 timestamp const dateString = '2018-04-20'; date = new Date(Date.parse(dateString)); console.log(date.toString()); // Fri Apr 20 2018 08:00:00 GMT+0800 (CST) // 從 timestamp 取得時間 date = new Date(1524192512090); console.log(date.toString()); // Fri Apr 20 2018 10:48:32 GMT+0800 (CST) // 格式化時間 // 這個就真的沒招了,不用套件的話得自己取值組合 date = new Date(1524192512090); formatDate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2) + ' ' + date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds(); console.log(formatDate); // 2018-04-20 10:48:32 // 時間位移 const datetimeString = '2018-04-20 12:00:00'; const convertToDate = new Date(Date.parse(datetimeString)); const otherDate = new Date( convertToDate.getFullYear(), convertToDate.getMonth(), convertToDate.getDate() - 1, convertToDate.getHours() - 1, convertToDate.getMinutes(), convertToDate.getSeconds() ); console.log(convertToDate.toString()); // Fri Apr 20 2018 12:00:00 GMT+0800 (CST) console.log(otherDate.toString()); // Thu Apr 19 2018 11:00:00 GMT+0800 (CST) // 時間差異 const dateBegin = '2018-04-19'; const dateEnd = '2018-04-20'; const begin = new Date(Date.parse(dateBegin)); const end = new Date(Date.parse(dateEnd)); console.log((end.getTime() - begin.getTime()) / 1000); // 86400
相信看完上面的範例以後,大家應該都會去裝 moment.js 了 XDDDD