【问题标题】:Why won't PHP strtotime work for a date in this format mdy?为什么 PHP strtotime 不适用于这种 mdy 格式的日期?
【发布时间】:2014-04-24 10:18:54
【问题描述】:

我在 PHP 5.2.17 中验证日期时遇到问题。我需要用户能够输入没有任何标点符号的六位数日期,因此 2014 年 1 月 15 日将是 011514。(这是由于输入设备限制和用户方便)。

经过测试,这不起作用:

$testDate = "011514";
$myDate   = date('mdy', strtotime($testDate));
echo $myDate; 

我希望 myDate 与测试日期相同,但事实并非如此,它会打印出今天的日期 042314(2014 年 4 月 23 日)! PHP 不喜欢我的原始字符串中没有标点符号。如果我更改 $testDate = "01-15-14" 那么 PHP 会吐出正确的字符串 "011514"。

如何让 strtotime() 了解我想在不使用 date_create_from_format 的情况下检查“mdy”格式的日期?

额外信息: PHP 版本为 5.2.17,因此无法使用 date_create_from_format。

【问题讨论】:

  • 为什么要将mdy 格式转换为mdy 格式?
  • 这只是一个测试示例,$testDate 实际上是用户输入。所以它可能是“388374”,也可能是“0101415”,这就是为什么我需要测试他们的输入并检查它是否是一个日期。永远不要相信用户输入。

标签: php date


【解决方案1】:

strtotime() 可以理解的内容是有限的。它无法理解一切。这就是为什么他们告诉我们它的作用,而作为开发人员,我们需要以尊重这一点的方式编写我们的代码。

您只需在代码中插入斜杠即可,一切就绪。

$testDate = "011514";
$date = sprintf('%s/%s/%s',
    substr($testDate, 0, 2),
    substr($testDate, 2, 2),
    substr($testDate, 4, 2) 
);
$myDate   = date('mdy', strtotime($date));
echo $myDate; 

Demo

【讨论】:

  • 这让我做得很好。将来我希望升级到更新的 PHP 版本,这样我就不必对日期进行此类操作。 sprintf 对我来说也是新手,非常适合手头的工作。
【解决方案2】:

回答你唯一的问题

如何让 strtotime() 了解我想在不使用 date_create_from_format 的情况下检查“mdy”格式的日期?

要让strtotime() 了解您的格式,您需要下载 php 源代码,对其进行修补以支持这种奇怪的格式并使用您的自定义构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-19
    • 2017-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2013-08-07
    相关资源
    最近更新 更多