2015-03-13 121 views
2

我正在做一个函数来检查月份是否有效。 例如。如何检查给定的字符串是否有效月份?

checkMonth("Feb") => true 

checkMonth("Mar") => true 

checkMonth(02) => true 

checkMonth(2) => true 

checkMonth("X") => false 

checkMonth("XYZ") => false 

有一个在数字形式2或02 但是,如果我传递的参数,如“X”或“XYZ”它不工作并返回true没有问题。

我试着

echo date('n', strtotime("XYZ")); 

这是返回true,因为日期( 'N',的strtotime( “XYZ”))的值是3,它是一个有效的一个月。

我也试过

$mon=date_format(date_create("XYZ"),"n"); 

但它具有相同的影响。

回答

1

您可以创建自己的函数并设置一个数组来保存1,2,3,4和01,02,03以及jan,feb,march,然后在函数中检查数组中是否存在字符串,然后返回true :)

去吧! :d

编辑: 如果你想使冷却器可以做出的preg_match ......但有一点麻烦:P

编辑2:您可以使用了checkdate:http://php.net/manual/en/function.checkdate.php

+0

这可能是一种做法。但是在php中没有任何函数可以检查字符串是否有效月吗? – Sam 2015-03-13 07:57:34

+1

@Sam,检查我的第二次编辑,checkdate可能是你要找的 – Medda86 2015-03-13 08:02:32

+0

使用checkdate()这就是为什么我需要将字符串月份转换为数字,因为它需要所有的数字参数。 – Sam 2015-03-13 08:32:32

0
<? 
date_default_timezone_set('UTC'); 
echo strtotime('xyz'); 
?> 

给我空值和 打印真实!

你可以像

<? 
function isMonthString(month) { 
if(strtotime(month) == null) 
return False; 
return date("n", strtotime(month)); 
} 
?> 

功能请注意,我的PHP是一个有点朦胧所以语法可能是错误的。

这从PHP手册功能似乎这样的伎俩

<? 
function validateDate($date, $format = 'Y-m-d H:i:s') 
{ 
    $d = DateTime::createFromFormat($format, $date); 
    return $d && $d->format($format) == $date; 
} 
?> 

功能从这个answerphp.net

2
$month = 'XYZ'; 
$x = DateTime::createFromFormat('M', $month); 
if (!$x) { 
    die($month . ' is not a valid month'); 
} 
echo $month, 'is month number ', $x->format('n'), PHP_EOL; 

(只有英文名工作几个月被复制)

+0

$ month ='X'。 Not working showing X is month number 10. – Sam 2015-03-13 08:30:40

+0

禁用拉丁日历 – 2015-03-13 08:31:37

+2

如果您想要一个可靠的方法来做到这一点,那么您可以创建一个有效值数组来测试......您只需要12个条目 – 2015-03-13 08:32:22

相关问题