1. 程式人生 > >yii2.0使用AR查詢,將資料庫時間戳格式化

yii2.0使用AR查詢,將資料庫時間戳格式化

資料庫一般來說,存的時間為uninx時間戳,根據需求,可能會將查詢出來的日期進行格式化

1、如果結果集只有一條,則可在查詢後,使用date函式轉化即可

$time = date("Y-m-d H:i:s",$time);

2、如果有多條結果集,不建議遍歷結果集,一一格式化時間,可直接在sql中使用from_unixtime(),該函式是mysql中的函式;

select from_unixtime(create_time,"%Y-%m-%d") as time from student

3、如果在Yii中,使用AR查詢,不直接寫sql,則在使用的時候會報錯

Student::find()

->select("id,name,from_unixtime(create_time,"%Y-%m-%d")  create_time")

->asArray()

->all();

這樣寫會報錯,因為AR中,會在查詢時,以逗號為分割,預設給每一個元素加上“上引號”,如果使用函式,會給整體再加上“上引號”,出現轉義錯誤,所以使用如下方法:

Student::find()

->select(new Expression("id,name,from_unixtime(create_time,"%Y-%m-%d")  create_time"))

->asArray()

->all();

使用new Expression()處理一下就好了

備註:

使用 FROM_UNIXTIME函式,具體如下:    FROM_UNIXTIME(unix_timestamp,format)    

返回表示 Unix 時間標記的一個字串,根據format字串格式化。format可以包含與DATE_FORMAT()函式列出的條目同樣的修飾符。    根據format字串格式化date值。下列修飾符可以被用在format字串中: %M 月名字(January……December)    %W 星期名字(Sunday……Saturday)    %D 有英語字首的月份的日期(1st, 2nd, 3rd, 等等。)    %Y 年, 數字, 4 位    %y 年, 數字, 2 位    %a 縮寫的星期名字(Sun……Sat)    %d 月份中的天數, 數字(00……31)    %e 月份中的天數, 數字(
0……31)    %m 月, 數字(01……12)    %c 月, 數字(1……12)    %b 縮寫的月份名字(Jan……Dec)    %j 一年中的天數(001……366)    %H 小時(00……23)    %k 小時(0……23)    %h 小時(01……12)    %I 小時(01……12)    %l 小時(1……12)    %i 分鐘, 數字(00……59)    %r 時間,12 小時(hh:mm:ss [AP]M)    %T 時間,24 小時(hh:mm:ss)    %S 秒(00……59)    %s 秒(00……59)    %p AM或PM    %w 一個星期中的天數(0=Sunday ……6=Saturday )    %U 星期(0……52), 這裡星期天是星期的第一天    %u 星期(0……52), 這裡星期一是星期的第一天    %% 一個文字“%”。