PHP日期格式精度

时间:2013-02-21 12:12:42

标签: php datetime

有没有人知道是否已经有办法将日期格式化为一定的精度,而我没有写一些东西来重建给定的格式?

例如,假设我有任何格式的日期,但我想将其转换为Y-m-d H:i:s格式,使用PHP DateTimeFormat(参见下面的PHP网站示例)

    $date = new DateTime('2000-01-01');
    echo $date->format('Y-m-d H:i:s');
    Result: 2000-01-01 00:00:00

我真正希望它做的不是返回H:i:s的一部分,如果它从未包含在原始日期中。

目前,我能想到的唯一方法是使用 date_parse_from_format ,找出遗漏的内容,然后对日期格式'Ymd H:i:s'进行某种字符串处理省略我不需要的部分(杂乱的字符串格式,因为这种日期格式可能是任何东西)。

如果我已经错过了一个功能,我只是不想重新发明轮子。

Ta,Jo

编辑:为了更清楚,日期格式字符串和$ date的精度是可变的,所以我不能硬编码格式字符串,我不知道$ date的精度,直到我得到它

5 个答案:

答案 0 :(得分:0)

preg_match是您正在寻找的,具体来说:

if(preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date)){
   //here do the conversion for "Y-m-d H:i:s"
}else{
   //here do the conversion for "Y-m-d"
}

答案 1 :(得分:0)

我想你必须知道你的日期是什么格式。

<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";

$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";

$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";

$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";

$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>

答案 2 :(得分:0)

使用strtotime将几乎任何日期格式转换为时间戳。从那里,您可以使用date()来设置您想要的格式。

欲了解更多信息:

http://php.net/manual/en/function.strtotime.php

http://www.php.net/manual/en/function.date.php

编辑: date_parse也可能达到你想要的效果:

http://www.php.net/manual/en/function.date-parse.php

答案 3 :(得分:0)

我不认为这是最有效的方法,但似乎有效。它可以调整,以允许不同的精度水平。 (我选择了Y-m-d H:i:sY-m-d H:iY-m-d。我认为Y-m-d H不会有帮助,但也许您可能会Y-m-d ha。如果是这样,添加它会很容易。)

<?php
// Output dates at arbitrary precision.
header ('Content-Type: text/plain');

$input = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
$date  = new DateTime($input);
echo format_date($date);

function format_date($date) {
    switch ($date->format('s')) {
    case '00':
        switch ($date->format('H')) {
        case '00':
            return $date->format('Y-m-d');
        default:
            return $date->format('Y-m-d H:i');
        }
    default:
        return $date->format('Y-m-d H:i:s');
    }
}

当然,这并不允许这个人真正想要一个恰好午夜的时间,并且明确地这么说。我不知道你覆盖这个案子有多重要。

答案 4 :(得分:0)

这是将时间和日期保存为unix时间戳而不是其他格式的最佳方式。

我已经创建了一个类来处理php中的日期和时间。它易于使用且非常有用

在您的情况下,您可以使用提供的setter设置年,月,日,小时,分钟和秒,而不是扩展公共功能以获取预期格式的日期和时间。

include_once("scTimestamp.php");
$test=new scTimestamp();

echo $test->getDateAsString();

$test->setTimestamp(1210203200);

echo $test->getDateDifferenceFromNow();

echo $test;

$test->setTimestamp(121020320022);
echo $test->getYear();

echo $test;

一旦包含它,可以按照以下方式使用

{{1}}

结果就是这样。

2015年6月26日,2008年5月7日,晚上11:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^ @@时间戳:1210203200 @@ @@日期:2008年5月7日,晚上11:33 @@ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 5804 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@时间戳:121020320022 @@ @@日期:12月25日,5804,凌晨3:33 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

此类可根据需要使用