更改日期格式(保留"变量")

时间:2013-04-18 13:28:16

标签: php datetime

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

目前我已经想出了这个:

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年3月15日

我希望输出为:

15-03-2013

而不是:

15-03-2013 00:00:00

如果你想要参数格式是什么,我应该将它强制为格式。

编辑:

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

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

5 个答案:

答案 0 :(得分: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 page

上找到的更多示例

答案 1 :(得分: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);
}

答案 2 :(得分:0)

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

我为你创建了一个函数,例如$date参数。如果没有指定时间,则2012-01-01 01:00:002012-02-03$dateFormatdate()格式,如果时间<$dateTimeFormatdate()格式已经指定了strong> has 。

<?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"
?>

DEMO

答案 3 :(得分: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));

答案 4 :(得分:0)

一些hacky解决方案,但你可以使用:

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

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

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

return $date;

jist是,如果日期包含00:00:00,则删除字符串的那一部分以及- 1帐户中日期和时间之间的空格。