如何检查所给字符串是否为有效月份?

3
我正在编写一个函数来检查月份是否有效。 例如:
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,因为date('n', strtotime("XYZ"))的值为3,是一个有效的月份。

我也尝试过其他方法。

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

但它具有相同的影响。
3个回答

3
$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;

(仅适用于英语月份名称)


$month = 'X'。不起作用,显示X是第10个月的数字。 - Sam
禁用你的拉丁日历。 - Mark Baker
3
如果您想要一种可靠的方法来做这件事,那么您可以创建一个有效值数组来进行测试...您只需要12个条目。 - Mark Baker

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

这可以是一种方法。但是在php中难道没有任何函数可以检查字符串是否为有效的月份吗? - Sam
1
@Sam,请检查我的第二次编辑,checkdate可能是你正在寻找的。 - Medda86
我正在使用checkdate(),所以我需要将字符串月份转换为数字,因为它接受所有数字参数。 - Sam

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

给我一个空值并且打印出true!

你可以有一个像这样的函数

<?
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;
}
?>

这个函数是从答案或者php.net复制过来的


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接