我从API接收日期字符串,格式为yyyy-mm-dd.
我目前正在使用正则表达式验证字符串格式,这可以正常工作,但我可以看到一些情况,根据字符串,它可能是一个正确的格式,但实际上是一个无效的日期.即2013-13-01,例如.
有没有更好的方法在PHP中获取字符串,2013-13-01并告诉它是否是格式的有效日期yyyy-mm-dd?
我正在尝试编写一个函数来确定字符串是否是使用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) 以下是我之前验证日期的方式.我也有自己的函数来转换日期格式,但是,现在使用PHP的DateTime类,所以不再需要它们.我应该如何使用DataTime最好地验证有效日期?还请让我知道您是否认为我应该首先使用DataTime.谢谢
PS.我使用面向对象的风格,而不是程序风格.
static public function verifyDate($date)
{
//Given m/d/Y and returns date if valid, else NULL.
$d=explode('/',$date);
return ((isset($d[0])&&isset($d[1])&&isset($d[2]))?(checkdate($d[0],$d[1],$d[2])?$date:NULL):NULL);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用PHP验证日期.
我希望以下格式有效:
d/m/yy
d/m/yyyy
dd/m/yy
dd/m/yyyy
d/mm/yy
d/mm/yyyy
dd/mm/yy
dd/mm/yyyy
Run Code Online (Sandbox Code Playgroud)
我尝试过很多正则表达式和checkdate()函数的不同变体.目前我有这样的事情:
function _date_is_valid($str)
{
if(strlen($str) == 0)
return TRUE;
if(substr_count($str,'/') == 2)
{
if (preg_match("/^((((31\/(0?[13578]|1[02]))|((29|30)\/(0?[1,3-9]|1[0-2])))\/(1[6-9]|[2-9]\d)?\d{2})|(29\/0?2\/(((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))|(0?[1-9]|1\d|2[0-8])\/((0?[1-9])|(1[0-2]))\/((1[6-9]|[2-9]\d)?\d{2}))/", $str))
{
$datearray = explode('/',$str);
if($datearray[2] > 2030)
return FALSE;
return checkdate($datearray[1], $datearray[0], $datearray[2]);
}
else
{
return FALSE;
}
}
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
然而,这验证了11/11/200和11/11/200的日期#
如何验证日期以匹配所需的格式?
编辑:我可以检查datearray [2]在10到30之间以及2010年和2030年之间.但有没有办法使用正则表达式进行检查?
Edit1:在strlen上返回TRUE($ str)== 0是因为我希望用户能够在不知道事件何时发生的情况下添加事件,以便其他人可以限定日程安排并将事件分配到特定日期以后
仅供记录.我最终做了:
function _date_is_valid($str)
{
if(strlen($str) == 0) //To accept entries without a date
return TRUE;
if(substr_count($str,'/') == 2)
{
list($d,$m,$y) = explode('/',$str);
if(($y >= …Run Code Online (Sandbox Code Playgroud) 我使用笨用PHP.我正在使用以下表格,
<?php
echo form_open('/register/create_new', $form_params);
?>
DOB: <input type="text" id="dob" name="reg[dob]">
<input type="submit" value="Create Account" />
</form>
Run Code Online (Sandbox Code Playgroud)
在这里,#dob是dd-mm-yyyy格式.
我的验证码是,
array(
'field' => 'reg[dob]',
'label' => 'DOB',
'rules' => 'required'
)
Run Code Online (Sandbox Code Playgroud)
如何设置rules正确的日期验证?
有没有人知道是否有内置或快速功能来检查字符串是否是MySQL日期时间格式?这是一个例子:
2038-01-19 03:14:07
Run Code Online (Sandbox Code Playgroud)
如果按照以下格式通过表单提交日期,$month=2, $day=31, $year= 2010.如果有效日期,如何使用PHP日期函数进行验证?谢谢.
我怎样才能检查变量是否是php上的日期时间类型?我试过这个,但似乎不起作用.
public function setRegistrationDate ($registrationDate) {
if (!is_date($registrationDate, "dd/mm/yyyy hh:mm:ss")) {
trigger_error('registrationDate != DateTime', E_USER_WARNING);
return;
}
$this->_registrationDate = $registrationDate;
}
Run Code Online (Sandbox Code Playgroud) function validateDate($date, $format = 'm-Y') {
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
validateDate('09-2017', 'm-Y');
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么这会在前几个月返回true时返回false.有任何想法吗?