當前位置:成語大全網 - 新華字典 - 將自然語言的日期用PHP解析

將自然語言的日期用PHP解析

代碼如下

<?php

$date_str?=?"明天下午兩點半";

$date_str?=?"後天早上八點三十壹";

echo?$date_str."&nbsp;&nbsp;";

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));

>