本文介绍了我喜欢strtotime但在新西兰没用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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但在新西兰没用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-05 18:08