strtotime() 将不存在的日期转换为另一个日期
我正在根据用户输入的日期、月份和年份值构建时间戳。
假设用户输入了一些错误的值,并且日期是不存在的“31-02-2012”,那么我必须得到错误的返回。但这里将其转换为附近的另一个日期。准确地说:“02-03-2012”..
我不希望这种情况发生..
$str = "31-02-2012";
echo date("d-m-Y",strtotime($str)); // Outputs 02-03-2012
任何人都可以帮忙吗?如果日期不是原始日期,我不希望返回时间戳。
I am building a timestamp from the date, month and year values entered by users.
Suppose that the user inputs some wrong values and the date is "31-02-2012" which does not exist, then I have to get a false return. But here its converting it to another date nearby. Precisely to: "02-03-2012"..
I dont want this to happen..
$str = "31-02-2012";
echo date("d-m-Y",strtotime($str)); // Outputs 02-03-2012
Can anyone help? I dont want a timestamp to be returned if the date is not original.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以查看
checkdate
。You might look into
checkdate
.这是因为
strtotime()
在使用-
时遇到了麻烦,因为它们用于表示-1 week
等短语...尝试
但是
31-02-2012
不是有效的英文格式,它应该是02-31-2012
。如果您的 PHP >= 5.3,您可以使用
createFromFormat
:That's because
strtotime()
has troubles with-
since they are used to denote phrase like-1 week
, etc...Try
However
31-02-2012
is not a valid English format, it should be02-31-2012
.If you have PHP >= 5.3, you can use
createFromFormat
:在使用 strtotime 之前,您必须检查该日期是否可能。 Strtotime 会将其转换为 unix 日期,这意味着它将使用自...以来的秒数。这意味着它将始终是一个日期。
You'll have to check if the date is possible before using strtotime. Strtotime will convert it to unix date meaning it will use seconds since... This means it will always be a date.
您可以解决此问题
,或者仅使用
checkdate()
< /a>You can workaround this behavior
or just use
checkdate()
使用检查日期函数。
Checkdate 函数 - PHP 手册 & 爆炸函数 - PHP 手册
Use the checkdate function.
Checkdate Function - PHP Manual & Explode Function - PHP Manual
结合 date_parse 和 checkdate 来检查它是否是有效时间。
尽管根据 PHP 日期格式,该日期格式是可以接受的,它仍然可能会给日期解析器带来问题,因为很容易混淆月份和日期。例如,
02-03-2012
,很难判断 02 是月份还是日期。最好使用此处其他更具体的日期解析器示例首先解析日期,然后使用 checkdate 检查它。Combine date_parse and checkdate to check if it's a valid time.
Even though that date format is acceptable according to PHP date formats, it may still cause issues for date parsers because it's easy to confuse the month and day. For example,
02-03-2012
, it's hard to tell if 02 is the month or the day. It's better to use the other more specific date parser examples here to first parse the date then check it with checkdate.