我正在尝试编写一个函数来确定字符串是否是使用PHP的日期/时间.基本上有效的日期/时间如下:
2012-06-14 01:46:28
Run Code Online (Sandbox Code Playgroud)
显然虽然它的完全动态任何值都可以改变,但它应该总是以形式出现XXXX-XX-XX XX:XX:XX,如何编写正则表达式来检查这个模式,如果匹配则返回true.
我试图建立一个PHP日期验证(MM/DD/YYYY),但我遇到了问题.这是我得到的样本:
$date_regex = '%\A(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])[- /.](19|20)\d\d\z%';
$test_date = '03/22/2010';
if (preg_match($date_regex, $test_date,$_POST['birthday']) ==true) {
$errors[] = 'user name most have no spaces';`
Run Code Online (Sandbox Code Playgroud) 确定当前给定语言环境的短日期格式的最佳方法是什么?
例如,如果我的脚本的语言环境设置为荷兰语,我想以某种方式获取在该特定语言环境中使用的短日期格式,它将是:
DD-MM-YYYY
如果它设置为American,我想在美国语言环境中获取日期格式:
毫米/日/年
等等...
这有什么问题吗?
\n\npublic static function validaDataHoraBR($data_hora){\n $pattern = "/^([1-9]|0[1-9]|[1,2][0-9]|3[0,1])/([1-9]|1[0,1,2])/\\d{4} ([0-1][0-9]|[2][0-3])(:([0-5][0-9])){1,2}(:([0-5][0-9])){1,2}$/";\n return (preg_match($pattern, $data_hora)) ? array(true) : array(false,\' n\xc3\xa3o \xc3\xa9 uma data e hora no formato BR!<br>\'); \n}\nRun Code Online (Sandbox Code Playgroud)\n\n此模式验证了这一点 - 20/08/2011 21:00:00
\n\n错误:消息:preg_match() [function.preg-match]:未知修饰符 \'(\'
\nfunction validateDate( $date )
{
echo $date;
//2012-08-24 20:30:00
if(preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2}) ([1-2]{1})([0-9]{1}):([0-5]{1})([0-9]{1}):([0-5]{1})([0-9]{1})$/', $date) >= 1)
{
return true;
}
else
{
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
这总是返回false.我使用了一个唯一的工具来构建正则表达式,它在那里工作得很好.当我将"/"添加到正则表达式时,麻烦就开始了.不知何故PHP似乎需要这些,但我不知道为什么,我不知道为什么它打破了我的正则表达式.
它应该返回TRUE for sth.像"2012-08-24 20:30:00"和"asdf2012-08-24 20:30:00asdf"或任何不符合我的正则表达式的任何错误
提前致谢!
-----------------------编辑感谢您的所有答案!
正如一些用户指出我的函数在样本日期"2012-08-24 20:30:00"返回true.但是,只有当我手动设置$ date ='2012-08-24 20:30:00'时才会这样做.如果我使用完全相同的字符串在我的代码中的其他地方调用该函数,则返回false.有谁知道为什么?
----------------------- EDIT2
对不起浪费你的时间,实际上是一些空格被添加到字符串中.在调用我的函数之前在我的日期使用trim()会给出正确的结果.
感谢大家!
因此,用户可以通过键入或使用日期选择器输入出生日期.这可能会出错,所以在服务器端我想检查它是否是一个有效的日期.
我在strtotime()上阅读了很多,看了很多例子,但不是100%正确的例子.
这就是我所拥有的:
$geboortedatum = $_POST['geboortedatum'];
$geboortedatum = date("Y-m-d", strtotime($geboortedatum));
list($y, $m, $d) = explode("-", $geboortedatum);
// var_dump(checkdate($d,$m,$y));
if(checkdate($d, $m, $y)) {
echo "OK Date";
}
else {
echo "BAD Date";
exit();
}
Run Code Online (Sandbox Code Playgroud)
这大部分时间都有效.有没有可靠的方法来检查输入是否是真实且正确的日期?
//编辑
那不是一个好例子!当用户输入31-31-1980时,它也不起作用.这也是有效的,虽然不应该!