【问题标题】:Check if date have a specific format检查日期是否具有特定格式
【发布时间】:2018-07-11 08:20:02
【问题描述】:

我需要检查一个日期是否有格式来保存它,我使用函数 strptime() :

if (!strptime($contact[14], '%Y') && isset($contact[14]) && $contact[14] != ""){
      $date_naissance =  $contact[14];
      dsm("BON FORMAT : ".$contact[14]);
    } else {
      $date_naissance = null;
      dsm("MAUVAIS FORMAT : ".$contact[14]);
    }

问题是格式似乎不起作用,我需要使用格式年份验证所有日期(例如:2010、2020、..)但它们没有验证,我不明白为什么,在 php 日期文档中 Y 表示 4 位数的年份。

有人有想法吗?

编辑:使用 CreateFromFormat :

if(DateTime::createFromFormat('Y', $contact[22])){
      dsm("Bon format : ".$contact[22]);
      $date_derniere_inscription = strtotime($contact[22]);
    } else {
      $date_derniere_inscription = null;
    }

但是只有两位数字的日期,甚至是0值的日期也被验证。

“Y”格式似乎不起作用,所有值(例如,2012 以及 96 或 0)都会创建一个日期,而 0 值会创建“0000-07-11 10:38”: 45.000000' .. 这种格式有什么问题?

【问题讨论】:

  • $contact[22] 中的值是多少?
  • 我有多个值,这里是输出: Bon 格式:0 Bon 格式:1996 Bon 格式:96,你可以看到所有的值都经过验证
  • 还有一个问题,例如 2012 年的值,输出是 2012-07-11 10:33:47.000000,我需要 2012-01-01 00:00:0000

标签: php date datetime


【解决方案1】:

createFromFormat 在这种情况下可以提供帮助。如果给定的日期字符串不是给定的格式,它将返回 false。

$date = DateTime::createFromFormat('Y-m-d', '11-Jan-2018');

if ($date) {
    echo 'In format';
} else {
    echo 'Not in format';
}

要重置除年份以外的所有字段(月、日、分、秒),您可以使用:

$date = DateTime::createFromFormat('Y|', '2012');

输出将是:2012-01-01 00:00:00.000000。可以使用format()函数转换成任意格式。

【讨论】:

  • 感谢这项工作,但我有些奇怪,我在 createFromFormat 中使用的格式是 'Y' 但也验证了只有两位数字的值,如何避免这种情况?
【解决方案2】:

您可以使用简单的正则表达式来执行此操作。

/(\d{4})/

示例代码:

<?php
$pattern = "/(\d{4})/";
$year = "2015";
if(preg_match($pattern, $year)){
    echo "Format correct!";
} else{
    echo "Format incorrect!";
}
?>

有关正则表达式的更多信息,请查看 PHP ManualREGEX Builder & Tester

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2011-10-06
    相关资源
    最近更新 更多