代碼如下
<?php$date_str?=?"明天下午兩點半";
$date_str?=?"後天早上八點三十壹";
echo?$date_str." ";
date_default_timezone_set("PRC");
//獲取當天零點的時間戳
$time?=?strtotime(date("Y-m-d"));
//數字中文對照
$num_lang=array('零',?'壹',?'二|兩',?'三',?'四',?'五',?'六',?'七',?'八',?'九',?30=>'半');
//時間段中文言對照
$date_lang=array(
array("下午|晚上|深夜",?3600*12),
array("淩晨|上午|早晨|早上",?0),
array("大後天",?3600*24*3),
array("大前天",?-3600*24*3),
array("後天",?3600*24*2),
array("前天",?-3600*24*2),
array("明天",?3600*24),
array("昨天",?-3600*24),
);
//累加移動的時間差
$tmp_str?=?$date_str;
foreach?($date_lang?as?$date?)?{
$lang_str?=?$date[0];
$lang_arr?=?explode("|",?$lang_str);
$period?=?$date[1];
foreach?($lang_arr?as?$lang?)?{
if?(strpos($tmp_str,?$lang)!==false)?{
$time?+=?$period;?
$tmp_str?=?str_replace($lang,?"",?$tmp_str);
}
}
}
//中文替換成數字
foreach?($num_lang?as?$num?=>?$lang_str)?{
$lang_arr?=explode("|",?$lang_str);
foreach?($lang_arr?as?$lang)?{
$tmp_str?=?str_replace($lang,?$num,?$tmp_str);
}
}
$tmp_str?=?preg_replace('/(\d+)十(\d)/',?"$1$2",$tmp_str);
$tmp_str?=?preg_replace('/(\d+)十/',?"\${1}0",?$tmp_str);
$tmp_str?=?preg_replace('/十(\d)/',?"1$1",?$tmp_str);
//捕獲時分
preg_match('/(\d+)點(\d*)/',?$tmp_str,?$hur_min);
$hour?=?(int)?$hur_min[1];
$min?=?(int)?$hur_min[2];
$time?+=?$hour*3600+($min*60);
//輸出結果
print_r(date("Y-m-d?H:i",?$time));
>