如何检查变量$date
是否包含2011-09-20形式的日期?这是为了知道$date
是否包含任何字母,因为我想使用date()
并给出错误。如何检查变量是否包含日期或日期和文本?
回答
试试这个:
$date = '2011-09-20';
list($y, $m, $d) = explode("-", $date);
if(checkdate($m, $d, $y)){
echo "OK Date";
} else {
echo "BAD Date";
}
当试图解析带有字符串内容的变量时,建议避免非正确的错误: 'if(is_numeric($ y)&& is_numeric($ m)&& is_numeric($ d)&& checkdate($ m,$ d, $ y)){' – ldmuniz
也许它帮助,如果你尝试is_numeric()结合的str_replace()方法,像这样:
<?php
$isValid = is_numeric(str_replace('-', '', $myDateToCheck));
?>
当然,这并没有说明日期的格式,而是显示变量是否包含任何非数字字符。
如果上述示例返回true,则可能需要使用checkdate()方法来进一步调查变量。
尽管它并不完美,
if (false === strtotime($date)) {
echo 'invalid date';
else {
echo 'valid date';
}
为什么?它出什么问题了?我认为这是完美的方式,允许所有可能的日期格式。 –
好吧,strtotime('now')会返回一个时间戳,这不是OP想要的 – Alfwed
您可以使用正则表达式(^[1-9]{4}-[1-9]{2}-[1-9]{2}$
)与preg_match这一点。
另一种方法是strptime
,它用于将字符串(与某种格式相关联)转换为时间。
这不是exatly你要求什么(也接受其他日期格式),但将有助于找出日期是否有效:
strtotime($date)
将返回FALSE
如果$date
具有无效的日期格式。
Manual
SOLUTION 1
结合什么@Alfwed和@JellyBelly中写道,这里是我是如何做的:
public function valid_date($inputdate){
$date = $inputdate;
if (strtotime($date)){
if (strpos($date,'/') !== false) {
list($day, $month, $year) = explode('/', $date);
return checkdate($month, $day, $year);
}else{
return false;
}
}else{
return false;
}
}
它会检查羯羊如果输入文本(例如:“ adasdsad“),或者它是否具有日期格式(例如:”10/02/1988“),并检查它是否是有效日期。
如果输入日期是10-10-1996也是有效格式或10.02.1996,它将不会接受它们,因为我要求用户使用带“/”的格式。只要删除,如果你不想做这个验证,就是这样。
解决方案2
我发现,解决方案1,如果你打算进入一个将来的日期不起作用。所以我不得不寻找另一种解决方案。那就是:
public function valid_date($date, $format = 'd/m/Y'){
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
这不是我的,发现它在:link
- 1. 包含日期和检查
- 2. 检查是否包含两个日期
- 3. 如何检查日历中是否包含选定日期包含日期小于今天的日期
- 4. 检查日期列表是否包含特定日期
- 5. 如何检查日期是否被python中的另一个日期所包含?
- 6. Java 8日期时间检查期间是否包含特定日期
- 7. 如何检查日期变量是否比当前日期早10秒以上
- 8. 如何检查字符串是否包含日期?
- 9. T-SQL如何检查DataTime是否包含日期字符串?
- 10. 是否可以使用包含日期的变量设置新DateTime的日期?
- 11. 如何检查日期是否在某个星期或季度
- 12. 如何检查日期是否到达或每年过期
- 13. 检查日期是否改变
- 14. 如何检查日期是否大于其他日期?
- 15. 如何检查日期是否在两个日期之间?
- 16. 如何检查日期是否大于今天的日期Laravel5
- 17. 如何检查日期是否在两个日期之间mysql?
- 18. jquery如何检查日期是否小于当前日期
- 19. 如何检查当前日期是否大于结束日期?
- 20. 如何检查移动日期是否为当前日期
- 21. 如何检查日期是否发生?
- 22. 如何检查日期是否已过
- 23. 检查日期是否在特定日期和排序
- 24. Javascript如何检查日期是否大于或等于日期值
- 25. 检查当前日期是否在开始日期和结束日期之间
- 26. Eloquent:检查日期是否在开始日期和结束日期之间
- 27. MySQL检查db中的日期是否包含给定日期范围的日期
- 28. 检查一个字符串是否包含日期
- 29. 检查日期时间字符串是否包含时间
- 30. 检查日期是否包含时间戳
你为什么要限制自己的格式“2011-09-20”? '20-09-2011'有什么问题?来自美国以外的国家,我可以告诉你,因为我使用的日期格式不是美国使用的格式,所以出现错误非常令人沮丧。 strtotime()接受所有的日期格式,请不要毁掉你的软件;) –
我也在美国以外。但是我使用的产品来自美国。 – EnexoOnoma
我添加一个演示:http://stackoverflow.com/questions/7645094/how-to-check-if-a-variable-contains-a-date-or-a-date-and-text/7645146#7645146 – JellyBelly