strtotime总是在1月1日回归

时间:2013-11-29 00:28:00

标签: php database date strtotime

尝试在cms上的帖子旁边有一个基本时间戳,但strtotime给了我一些问题。

所以我有这个:

$postDate = $row['date'];
$written_month = date("F", strtotime($postDate));
$short_month = substr($written_month, 0, 3);
$day_number = date("j", strtotime($postDate));

echo '
    <div id="postTimeStamp">
    <div id="postTimeStamp_day">
    '.$day_number.'
    </div>

    <div id="postTimeStamp_month">
    '.$short_month.'
    </div>
    </div>
';

我无法弄清楚为什么但是这一天总是第1天,月份是1月。

如果我这样做

     $echo $postDate;

正确显示数据。

在数据库中,日期存储为例如2013年10月12日

我哪里错了?

克雷格。

3 个答案:

答案 0 :(得分:1)

我尝试了你的代码,它的工作正常:

$postDate = '12/12/2012';
$written_month = date("F", strtotime($postDate));
$short_month = substr($written_month, 0, 3);
$day_number = date("j", strtotime($postDate));

echo '
    <div id="postTimeStamp">
    <div id="postTimeStamp_day">
    '.$day_number.'
    </div>

    <div id="postTimeStamp_month">
    '.$short_month.'
    </div>
    </div>
';

确保$ row ['date'];是一个字符串,并由strtotime(http://www.php.net/manual/de/datetime.formats.date.php)支持格式。

答案 1 :(得分:1)

2013年12月10日的日期不明确。在美国,它意味着2013年10月12日,在英国意味着2013年12月10日。我确信MySQL永远不会以这种格式返回日期值,因此我认为您的主要问题是您使用的是TEXT或VARCHAR值在您的数据库中存储日期。不要那样做。

此外,对strtotime()进行两次调用有点多余,如果您想要一个三个字母的月份,请在strtotime()来电中使用“M”。试试这个:

list($month,$day)=explode(' ',date('M j',strtotime('2013-10-12')));

答案 2 :(得分:0)

我测试了不同的格式,所以d-m-y而不是d / m / y,并且工作正常。

不知道为什么但是嘿嘿:)