有朋友問php與mysql有沒有辦法把日期轉時間戳或把指定日期轉換成時間戳呢,其實這個是有并且還非常的簡單,下面我來給大家介紹介紹.
一、在MySQL中完成
這種方式在MySQL查詢語句中轉換,優點是不占用PHP解析器的解析時間,速度快,缺點是只能用在數據庫查詢中,有局限性.
1. UNIX時間戳轉換為日期用函數:FROM_UNIXTIME(),一般形式代碼如下:
select FROM_UNIXTIME(1156219870);
2. 日期轉換為UNIX時間戳用函數:UNIX_TIMESTAMP(),一般形式代碼如下:
Select UNIX_TIMESTAMP('2006-11-04 12:23:00′);
舉例:mysql查詢當天的記錄數,代碼如下:
- $sql=”select * from message Where DATE_FORMAT(FROM_UNIXTIME(chattime),'%Y-%m-%d') = DATE_FORMAT(NOW(),'%Y-%m-%d') order by id desc”;
當然大家也可以選擇在PHP中進行轉換,下面說說在PHP中轉換.
二、在PHP中完成
這種方式在PHP程序中完成轉換,優點是無論是不是數據庫中查詢獲得的數據都能轉換,轉換范圍不受限制,缺點是占用PHP解析器的解析時間,速度相對慢.
1. UNIX時間戳轉換為日期用函數:date()
一般形式:date('Y-m-d H:i:s', 1156219870);
2. 日期轉換為UNIX時間戳用函數:strtotime() 一般形式:
strtotime('2010-03-24 08:15:42');
例,代碼如下:
- <?php
- class SaonekController extends Controller {
- public function indexAction(){
- /*時間戳轉換成日期不用說了
- 但是日期要轉成時間戳的話就要用到strtotime()
- */
- $time = time();//時間戳
- $nowtime = date('Y-m-d H:i:s',$time);//生成帶格式的日期
- $oldtime = '2010-11-10 22:19:21';
- $catime = strtotime($oldtime);//日期轉換為時間戳
- $nowtimes = date('Y-m-d H:i:s',$catime);//時間戳又轉回日期了
- echo $nowtimes;
- }
- }
- ?>
要求只能在白天8:00-20:00發送短信,怎么樣獲得到每天的這段時間區間?如下代碼:
- <?
- $y=date("Y",time());
- $m=date("m",time());
- $d=date("d",time());
- $start_time = mktime(9, 0, 0, $m, $d ,$y);
- $end_time = mktime(19, 0, 0, $m, $d ,$y);
- $time = time();
- if($time >= $start_time && $time <= $end_time)
- {
- // do something....
- }
- ?>
一些你不知道的用法,代碼如下:
- <?php
- # on 2/8/2010
- date('m/d/y', strtotime('first day')); # 02/01/10
- date('m/d/y', strtotime('last day')); # 02/28/10
- date('m/d/y', strtotime('last day next month')); # 03/31/10
- date('m/d/y', strtotime('last day last month')); # 01/31/10
- date('m/d/y', strtotime('2009-12 last day')); # 12/31/09 - this doesn't work if you reverse the order of the year and month
- date('m/d/y', strtotime('2009-03 last day')); # 03/31/09
- date('m/d/y', strtotime('2009-03')); # 03/01/09
- date('m/d/y', strtotime('last day of march 2009')); # 03/31/09
- date('m/d/y', strtotime('last day of march')); # 03/31/10
- ?>
注意:php5.1以上時間戳會與實際時間相差8小時,解決辦法如下.
1、最簡單的方法就是不要用php5.1以上的版本--顯然這是不可取的方法?。?!
2、修改php.ini。打開php.ini查找date.timezone 去掉前面的分號= 后面加Asia/Shanghai,重啟apache服務器即可--缺點就是如果程序,放到別人的服務器上,不能修改php.ini,那就奈何不得了.
3、在程序中添加時間的初始化的語句的,即:“date_default_timezone_set("Asia/Shanghai"); ”這個可以由程序員任意設置,我的推薦。
時區標識符,大陸內地可用的值是:PRC,Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次為中國,重慶,上海,烏魯木齊),Etc/GMT-8,Asia/Harbin
港臺地區可用:Asia/Macao,Asia/Hong_Kong,Asia/Taipei(依次為澳門,香港,臺北)
還有新加坡:Asia/Singapore
新聞熱點
疑難解答