问题描述
Hi Folk
我喜欢strtotime功能,因为我可以在一个表单中创建一个日期字段和
只是告诉我的用户输入任何他们的东西想要,只要它是一个约会,
它会起作用。
但是,这显然不适用于日/月对月/日
场景。也就是说,在新西兰,我们使用日/月/年,而函数
假设它是月/日/年。
有没有人有一个简单的功能,可以帮助我弥补这个漏洞(我使用PHP 4.4来支付
)。
我从php.net复制了下面的函数,但是我没有认为它可以在
所有情况下工作。
干杯
Hi Folk
I love the strtotime function, because I can make a date field in a form and
just tell my users to enter whatever they want and as long as it is a date,
it will work.
HOWEVER, this obviously does not work for the day/month vs month/day
scenario. That is, in New Zealand we use day/month/year, while the function
assumes it to be month/day/year.
Does anyone have a simple function that helps me close that loophole (I am
using PHP 4.4).
I copied the function below from php.net, but I dont think it will work in
all cases.
Cheers
#根据给定的格式返回字符串的时间戳,如果不明确,则返回默认的
时区。
#%Y - 作为小数的年份包括世纪的数字
#%m - 作为十进制数的月份(范围01到12)
#%d - 作为十进制数的月中的某一天(范围01到31)
#%H - 小时数作为十进制数使用24小时制(范围00到23)
#%M - 分钟作为十进制数
函数parseDate($ date,$ format ="%d /%m /%Y"){
//构建日期模式从给定的$格式开始,将分隔符保持在
的位置。
if(!preg_match_all(" /%([YmdHMp])([^%])* / ;,$ format,$ formatTokens,
PREG_SET_ORDER)){
返回false;
}
foreach( $ formatTokens as $ formatToken){
$ delimiter = preg_quote($ formatToken [2]," /" );
$ datePattern。="(。*)"。$ delimiter;
}
// Splits给定的$ date
if(!preg_match(" /& .;。$ datePattern。" /" ;, $ date,$ dateTokens)){
return false;
}
$ dateSegments = array();
for($ i = 0; $ i< count($ formatTokens) ; $ i ++){
$ dateSegments [$ formatTokens [$ i] [1]] = $ dateTokens [$ i + 1];
}
//将给定的$ date重新格式化为美国英语日期格式,适用于
strtotime()
if($ dateSegments [" Y" ]&& $ dateSegments [" m"]&& $ dateSegments [" d"]){
$ dateReformated =
$ dateSegments [" ; Y"]。" - "。$ dateSegments [" m"]。" - "。$ dateSegments [" d"];
}
else {
返回false;
}
if($ dateSegments [" H"]&& $ dateSegments [" ; M"]){
$ dateRe formated。=" "。$ dateSegments [" H"]。":"。$ dateSegments [" M"];
}
返回strtotime ($ dateReformated);
}
# Returns a timestamp from a string based on the given format and default
timezone if it''s ambiguous.
# %Y - year as a decimal number including the century
# %m - month as a decimal number (range 01 to 12)
# %d - day of the month as a decimal number (range 01 to 31)
# %H - hour as a decimal number using a 24-hour clock (range 00 to 23)
# %M - minute as a decimal number
function parseDate( $date, $format = "%d/%m/%Y") {
// Builds up date pattern from the given $format, keeping delimiters in
place.
if( !preg_match_all( "/%([YmdHMp])([^%])*/", $format, $formatTokens,
PREG_SET_ORDER ) ) {
return false;
}
foreach( $formatTokens as $formatToken ) {
$delimiter = preg_quote( $formatToken[2], "/" );
$datePattern .= "(.*)".$delimiter;
}
// Splits up the given $date
if( !preg_match( "/".$datePattern."/", $date, $dateTokens) ) {
return false;
}
$dateSegments = array();
for($i = 0; $i < count($formatTokens); $i++) {
$dateSegments[$formatTokens[$i][1]] = $dateTokens[$i+1];
}
// Reformats the given $date into US English date format, suitable for
strtotime()
if( $dateSegments["Y"] && $dateSegments["m"] && $dateSegments["d"] ) {
$dateReformated =
$dateSegments["Y"]."-".$dateSegments["m"]."-".$dateSegments["d"];
}
else {
return false;
}
if( $dateSegments["H"] && $dateSegments["M"] ) {
$dateReformated .= " ".$dateSegments["H"].":".$dateSegments["M"];
}
return strtotime( $dateReformated );
}
推荐答案
这篇关于我喜欢strtotime但在新西兰没用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!