例如有常用时间格式 yyyy-mm-dd HH:ii:ss,如何转换成PHP中date函数可使用的时间格式呢?
使用 PHPTimeFormatFromCommon() 可以把通用时间格式转换成PHP时间格式
PHPTimeFormatFromCommon('yyyy-mm-dd HH:ii:ss') => 'Y-m-d H:i:s'
使用 PHPTimeFormatToCommon() 可以把PHP时间格式转换成通用时间格式
PHPTimeFormatToCommon('Y-m-d H:i:s') => 'yyyy-mm-dd HH:ii:ss'
例如:
echo gmdate(PHPTimeFormatFromCommon('yyyy-mm-dd HH:ii:ss A DD'), time() + 8 * 3600);
结果:
2010-04-10 11:11:54 AM Saturday
具体使用说明请看代码中的注释,有详细说明。
/*
PHP Time Formatting Functions
Author: Fenying
Author: Fenying
Version: 1.0.0.1
Time: 2010-04-10
Time: 2010-04-10
CopyRight: All CopyRight Fenying Studio 2007-2010 Reserved.
*/
*/
$DS_TIME_TimeSign
=
array(
array( 'yyyy' , '<#0x01#>' , 'Y' ),
array( 'yy' , '<#0x02#>' , 'y' ),
array( 'MM' , '<#0x03#>' , 'F' ),
array( 'mm' , '<#0x04#>' , 'm' ),
array( 'M' , '<#0x05#>' , 'M' ),
array( 'm' , '<#0x06#>' , 'n' ),
array( 't' , '<#0x07#>' , 't' ),
array( 'dd' , '<#0x08#>' , 'd' ),
array( 'd' , '<#0x09#>' , 'j' ),
array( 'DD' , '<#0x10#>' , 'l' ),
array( 'D' , '<#0x11#>' , 'jS' ),
array( 'z' , '<#0x12#>' , 'z' ),
array( 'W' , '<#0x13#>' , 'W' ),
array( 'HH' , '<#0x14#>' , 'H' ),
array( 'hh' , '<#0x15#>' , 'h' ),
array( 'H' , '<#0x16#>' , 'G' ),
array( 'h' , '<#0x17#>' , 'g' ),
array( 'ii' , '<#0x18#>' , 'i' ),
array( 'ss' , '<#0x19#>' , 's' ),
array( 'c' , '<#0x20#>' , 'c' ),
array( 'r' , '<#0x21#>' , 'r' ),
array( 'a' , '<#0x22#>' , 'a' ),
array( 'A' , '<#0x23#>' , 'A')
);
$DS_TIME_SpecialChars = array(
'd' , 'D' , 'j' , 'l' , 'N' , 'S' , 'w' , 'z' ,
'W' , 'F' , 'm' , 'M' , 'n' , 't' , 'L' , 'o' ,
'Y' , 'y' , 'a' , 'A' , 'B' , 'g' , 'G' , 'h' ,
'H' , 'i' , 's' , 'e' , 'I' , 'O' , 'T' , 'Z' ,
'c' , 'r' , 'U'
);
/*
yyyy = 四位数年份
yy = 两位数年份
MM = 月份,英文完整单词
mm = 月份,数字,自动补0
M = 月份,英文缩写单词
m = 月份,数字,不补0
t = 月份天数,数字
dd = 日期,数字,自动补0
d = 日期,数字,不补0
DD = 星期,完整单词
D = 日期,数字,带st、nd、rd或th后缀
z = 天,数字,表示本年第几天
W = 周,数字,表示本年第几周
a = am或pm
A = AM或PM
HH = 小时,数字,24小时制,自动补0
hh = 小时,数字,12小时制,自动补0
H = 小时,数字,24小时制,不补0
h = 小时,数字,12小时制,不补0
ii = 分钟,数字,自动补0
ss = 秒钟,数字,自动补0
c = ISO 8601 格式的日期
r = RFC 822 格式的日期
*/
function PHPTimeFormatFromCommon( $TimeFormat)
{
global $DS_TIME_TimeSign , $DS_TIME_SpecialChars;
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 0 ], $Item [ 1 ], $TimeFormat);
foreach ( $DS_TIME_SpecialChars as $Item)
$TimeFormat = str_replace( $Item , '//' . $Item , $TimeFormat);
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 1 ], $Item [ 2 ], $TimeFormat);
return $TimeFormat;
}
function PHPTimeFormatToCommon( $TimeFormat)
{
global $DS_TIME_TimeSign , $DS_TIME_SpecialChars;
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 2 ], $Item [ 1 ], $TimeFormat);
foreach ( $DS_TIME_SpecialChars as $Item)
$TimeFormat = str_replace( '//' . $Item , $Item , $TimeFormat);
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 1 ], $Item [ 0 ], $TimeFormat);
return $TimeFormat;
}
array( 'yyyy' , '<#0x01#>' , 'Y' ),
array( 'yy' , '<#0x02#>' , 'y' ),
array( 'MM' , '<#0x03#>' , 'F' ),
array( 'mm' , '<#0x04#>' , 'm' ),
array( 'M' , '<#0x05#>' , 'M' ),
array( 'm' , '<#0x06#>' , 'n' ),
array( 't' , '<#0x07#>' , 't' ),
array( 'dd' , '<#0x08#>' , 'd' ),
array( 'd' , '<#0x09#>' , 'j' ),
array( 'DD' , '<#0x10#>' , 'l' ),
array( 'D' , '<#0x11#>' , 'jS' ),
array( 'z' , '<#0x12#>' , 'z' ),
array( 'W' , '<#0x13#>' , 'W' ),
array( 'HH' , '<#0x14#>' , 'H' ),
array( 'hh' , '<#0x15#>' , 'h' ),
array( 'H' , '<#0x16#>' , 'G' ),
array( 'h' , '<#0x17#>' , 'g' ),
array( 'ii' , '<#0x18#>' , 'i' ),
array( 'ss' , '<#0x19#>' , 's' ),
array( 'c' , '<#0x20#>' , 'c' ),
array( 'r' , '<#0x21#>' , 'r' ),
array( 'a' , '<#0x22#>' , 'a' ),
array( 'A' , '<#0x23#>' , 'A')
);
$DS_TIME_SpecialChars = array(
'd' , 'D' , 'j' , 'l' , 'N' , 'S' , 'w' , 'z' ,
'W' , 'F' , 'm' , 'M' , 'n' , 't' , 'L' , 'o' ,
'Y' , 'y' , 'a' , 'A' , 'B' , 'g' , 'G' , 'h' ,
'H' , 'i' , 's' , 'e' , 'I' , 'O' , 'T' , 'Z' ,
'c' , 'r' , 'U'
);
/*
yyyy = 四位数年份
yy = 两位数年份
MM = 月份,英文完整单词
mm = 月份,数字,自动补0
M = 月份,英文缩写单词
m = 月份,数字,不补0
t = 月份天数,数字
dd = 日期,数字,自动补0
d = 日期,数字,不补0
DD = 星期,完整单词
D = 日期,数字,带st、nd、rd或th后缀
z = 天,数字,表示本年第几天
W = 周,数字,表示本年第几周
a = am或pm
A = AM或PM
HH = 小时,数字,24小时制,自动补0
hh = 小时,数字,12小时制,自动补0
H = 小时,数字,24小时制,不补0
h = 小时,数字,12小时制,不补0
ii = 分钟,数字,自动补0
ss = 秒钟,数字,自动补0
c = ISO 8601 格式的日期
r = RFC 822 格式的日期
*/
function PHPTimeFormatFromCommon( $TimeFormat)
{
global $DS_TIME_TimeSign , $DS_TIME_SpecialChars;
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 0 ], $Item [ 1 ], $TimeFormat);
foreach ( $DS_TIME_SpecialChars as $Item)
$TimeFormat = str_replace( $Item , '//' . $Item , $TimeFormat);
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 1 ], $Item [ 2 ], $TimeFormat);
return $TimeFormat;
}
function PHPTimeFormatToCommon( $TimeFormat)
{
global $DS_TIME_TimeSign , $DS_TIME_SpecialChars;
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 2 ], $Item [ 1 ], $TimeFormat);
foreach ( $DS_TIME_SpecialChars as $Item)
$TimeFormat = str_replace( '//' . $Item , $Item , $TimeFormat);
foreach ( $DS_TIME_TimeSign as $Item)
$TimeFormat = str_replace( $Item [ 1 ], $Item [ 0 ], $TimeFormat);
return $TimeFormat;
}