【问题标题】:Retrieve date format and parse if needed in PHP如果需要,在 PHP 中检索日期格式并解析
【发布时间】:2017-12-13 08:39:07
【问题描述】:

我在从数据库中检索日期并以意大利语格式回显到屏幕时创建了此函数:

function get_data_ita($date) {
    if ($date == "")
        return "";

    $d = new DateTime($date);
    return $d->format('d/m/Y');
}

其中$date 是mysql 格式,例如:2017-12-31 14:00:00

现在,如果我传递了正确的格式,例如:2017-12-31 14:00:00,该函数就可以工作。 但有时我需要使用 SAME 函数,传递一个已经格式化的日期,例如:30/12/2017。在这种情况下,我当然会遇到解析错误。

如何检查传递的日期是否已经是意大利语格式,如果是则返回未触及的日期,如果不是,则解析日期? 我需要这样的功能:

function get_data_ita($date) {
    if ( $date== ALREADY_IN_ITALIAN_FORMAT )
       return $date;

    if ($date == "")
        return "";

    $d = new DateTime($date);
    return $d->format('d/m/Y');
}

echo get_data_ita("30/12/2017");
echo get_data_ita("2017-12-31 14:00:00");

回声:

30/12/2017
31/12/2017

更新:我自己找到了解决方案:

function validateDate($date, $format = 'Y-m-d')
{
    $d = DateTime::createFromFormat($format, $date);
    return $d && $d->format($format) == $date;
}

function get_data_ita($datetime_db) {

    if ( validateDate($datetime_db, 'd/m/Y') ) {
        return $datetime_db;
    }

    if ($datetime_db == "")
        return "";

    $date = new DateTime($datetime_db);
    return $date->format('d/m/Y');

}

【问题讨论】:

  • 我不知道如何检查日期是否已被解析
  • 为什么不使用 PHP date() 函数来实现呢?
  • 嗯,一个区别是在你的意大利日期中使用/,当数据库给你一个-分隔符时......你可以判断没有魔法,因为它们只是就 PHP 而言的字符串
  • 使用正则表达式或 DateTime::createFromFormat 函数测试数据格式

标签: php jquery datetime


【解决方案1】:

/ 替换为-

<?php

function get_data_ita($date) {
    if ($date == ""){
        return "";
    }
    $date = str_replace('/','-',$date);

    $d = new DateTime($date);
    return $d->format('d/m/Y');

}

echo get_data_ita("30/12/2017");
echo "\n";
echo get_data_ita("2017-12-31 14:00:00");

?>

查看演示:https://eval.in/918149

【讨论】:

    【解决方案2】:

    如果日期不是有效的日期格式,Strtotime 将返回 false。

    这适用于您的输入,但不适用于其他日期格式。

    function get_data_ita($date) {
        if ($date == "") return "";
    
        If(strtotime($date) !== False){
            $d = new DateTime($date);    
        }Else{
            $d = DateTime::createFromFormat('d/m/Y', $date);
        }
        return $d->format('d/m/Y');
    
    }
    
    echo get_data_ita("30/12/2017");
    echo get_data_ita("2017-12-31 14:00:00");
    

    https://3v4l.org/kt5Vg

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-15
      • 2021-11-10
      • 2014-09-26
      相关资源
      最近更新 更多