1

我正在尝试根据用户使用的国家/地区更改我的日期格式。

目前我想出了这个:

function format_date($date = '', $format=null)
    {
        if($date == "0000-00-00") return "";
        $DateTime = new DateTime($date);
                if(!$format){
                    $CI =& get_instance();
                    switch($CI->session->userdata("country")){
                        case 3:
                            $format = "d-m-Y H:i:s";
                        break;
                        default:
                            $format = "Y-m-d H:i:s";
                        break;
                    }
                }
                return $DateTime->format($format);
    }

但是如果 $date 的格式是:

2013-03-15 15:50:30

我希望输出为:

15-03-2013 15:50:30

如果格式是:

2013-03-15

我希望输出为:

15-03-2013

代替:

15-03-2013 00:00:00

如果您想要参数格式的用途是我应该将其强制为一种格式。

编辑:

有时我们只需要2013-04-12 16:52。

它也应该可以在这里格式化:/

4

5 回答 5

0

有点骇人听闻的解决方案,但您可以使用:

$date = $DateTime->format($format);

if (strpos($date, '00:00:00')) {

    $date = substr($date, 0, strpos($date, '00:00:00') - 1);
}

return $date;

要点是如果日期包含 00:00:00,则删除字符串的那部分并- 1占日期和时间之间的空间。

于 2013-04-18T13:42:28.217 回答
0

为此使用mkdate

/* 2013-04-18 */
echo date("Y-m-d", mktime(0, 0, 0, 12, 30, 1997));

/* 18-04-2013 */
echo date("d-m-Y", mktime(0, 0, 0, 12, 30, 1997));

您在php.net 页面上找到的更多示例

于 2013-04-18T13:31:01.830 回答
0
function format_date($date = '', $format=null)
{
    if($date == "0000-00-00") return "";

    // Compare len of str $date
    if(strlen($date) > 10)
        $his = " H:i:s";
    else
        $his = "";
    $DateTime = new DateTime($date);
            if(!$format){
                $CI =& get_instance();
                switch($CI->session->userdata("country")){
                    case 3:
                        $format = "d-m-Y" . $his;
                    break;
                    default:
                        $format = "Y-m-d" . $his;
                    break;
                }
            }
            return $DateTime->format($format);
}
于 2013-04-18T13:31:49.350 回答
0

您可以strpos用来检查字符串是否包含空格(那么它显然有时间戳)。

我为你创建了一个函数,它接受一个$date参数,例如。2012-01-01 01:00:00或者2012-02-03,如果没有指定时间,$dateFormat则为格式,如果指定时间,则为格式。date()$dateTimeFormatdate()

<?php
    function DateFormatDynamic($date, $dateFormat, $dateTimeFormat) {
        $unixTime = strtotime($date);
        if (strpos($date, " ") !== false) {
            return date($dateTimeFormat, $unixTime);
        } else {
            return date($dateFormat, $unixTime);
        }
    }

    var_dump(DateFormatDynamic("2013-03-15", "d-m-Y", "d-m-Y H:i:s"));
    //string(10) "15-03-2013"

    var_dump(DateFormatDynamic("2013-03-15 15:23:00", "d-m-Y", "d-m-Y H:i:s"));
    //string(19) "15-03-2013 15:23:00"

    var_dump(DateFormatDynamic("2013-03-15 15:23", "d-m-Y", "d-m-Y H:i"));
    //string(19) "15-03-2013 15:23"
?>

演示

于 2013-04-18T13:33:28.037 回答
0

您也可以在验证日期格式后尝试

$d = '2013-03-15 15:50:30';
$d2 = '2013-03-15';

function myFormatDate($d){
    $format = 'd-m-Y';
    if(count(explode(' ',$d)) > 1)
        $format = 'd-m-Y H:i:s';
    return date($format, strtotime($d));
}

var_dump(myFormatDate($d));
var_dump(myFormatDate($d2));
于 2013-04-18T13:37:01.180 回答