写一个转换程序,旨在把一套asp+mssql博客系统数据迁移到php+mysql系统下,需要转换日期类型(mssql数据库里的日期时间类型datetime值)为unix时间戳,但发现mssql里读取到的时间通过
$dateline=(int)strtotime($row[‘addtime’]);
转换,得到的值是0,很奇怪;检查后发现,$row[‘addtime’]的时间格式不太正常,形式如下:
06 28 2007 2:21PM
11 3 2005 12:52AM
03 18 2010 1:08AM
11 4 2005 12:56PM
01 23 2010 11:02AM
或许在php.ini里有mssql库的设置参数,可以设置日期时间类型的格式,但是绝大多数php环境配置都是默认状态的配置,于是需要通过程序兼容这个事实。
从mssql查询的sql语句做一下修改即可以:
$sql="SELECT [logid]
,convert(varchar(500),[topic]) as topic
,convert(text,[logtext]) as logtext
,[userid]
,[authorid]
,convert(varchar(100),[author]) as author
,convert(varchar(30),[addtime],120) as addtime
,[truetime]....."
通过查阅微软官方的MSDN,mssql的convert函数第三个参数,有以下格式
不带世纪数位 (yy) (1) | 带世纪数位 (yyyy) | 标准 | 输入/输出 (3) |
---|---|---|---|
– | 0 或 100 (1, 2) | 默认 | mon dd yyyy hh:miAM(或 PM) |
1 | 101 | 美国 | mm/dd/yyyy |
2 | 102 | ANSI | yy.mm.dd |
3 | 103 | 英国/法国 | dd/mm/yyyy |
4 | 104 | 德国 | dd.mm.yy |
5 | 105 | 意大利 | dd-mm-yy |
6 | 106 (1) | – | dd mon yy |
7 | 107 (1) | – | mon dd, yy |
8 | 108 | – | hh:mi:ss |
– | 9 或 109(1、2) | 默认设置 + 毫秒 | mon dd yyyy hh:mi:ss:mmmAM(或 PM) |
10 | 110 | 美国 | mm-dd-yy |
11 | 111 | 日本 | yy/mm/dd |
12 | 112 | ISO | yymmdd
yyyymmdd |
– | 13 或 113 (1, 2) | 欧洲默认设置 + 毫秒 | dd mon yyyy hh:mi:ss:mmm(24h) |
14 | 114 | – | hh:mi:ss:mmm(24h) |
– | 20 或 120 (2) | ODBC 规范 | yyyy-mm-dd hh:mi:ss(24h) |
– | 21 或 121 (2) | ODBC 规范(带毫秒) | yyyy-mm-dd hh:mi:ss.mmm(24h) |
– | 126 (4) | ISO8601 | yyyy-mm-ddThh:mi:ss.mmm(无空格) |
– | 127(6, 7) | 带时区 Z 的 ISO8601。 | yyyy-mm-ddThh:mi:ss.mmmZ
(无空格) |
– | 130 (1, 2) | 回历 (5) | dd mon yyyy hh:mi:ss:mmmAM |
– | 131 (2) | 回历 (5) | dd/mm/yy hh:mi:ss:mmmAM |
CONVERT (data_type[(length)], expression [, style])
select CONVERT(varchar, getdate(), 120 )
2004-09-12 11:06:08
select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),\’-\’,\’\’),\’ \’,\’\’),\’:\’,\’\’)
20040912110608
select CONVERT(varchar(12) , getdate(), 111 )
2004/09/12
select CONVERT(varchar(12) , getdate(), 112 )
20040912
select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
0 条评论。