在PHP中没有日或没有月份的date_format

时间:2016-08-29 23:52:54

标签: php date

我以这种方式约会:2014-10-20在变量中,使用:

date_format($myDateTime, "M jS, Y");

我得到了这个输出:Oct 20th, 2014,直到现在还可以。当我的变量有这样的东西时出现问题:2014-10-00使用:

$date_format($myDateTime, "M Y");

我得到这个:Sep 2014当它被认为是Oct 2014时(即使使用$myDateTime->modify('+1 month')不起作用),或者当我使用此2014-00-00时使用此date_format($myDateTime, "Y");

2013

我得到:stringr

如何获得正确的格式化日期?感谢。

3 个答案:

答案 0 :(得分:2)

2014-10-002014-00-00不是有效日期。我想你看到了。但是您知道自己的格式并且可以手动解析(由-爆炸或匹配正则表达式并解析每个元素)或更改格式以更正(使用-01而不是-00)。

案例1(爆炸):

$date = '2014-00-00'; // We need to get year
$dateParts = explode('-', $date);
$year = (int)$dateParts[0];

案例2(正则表达式):

$date = '2014-10-00';
if (preg_match('/^([0-9]{4})\-([0-9]{2})\/', $date, $matches)) {
    $year = (int)$matches[1];
    $month = (int)$matches[2];
} else {
    throw new \Exception('Invalid date format');
}
祝你好运!

答案 1 :(得分:1)

你可以设计一些DateTime可以接受的东西。如果您只是为了年,月和日进行枪击,则可以使用Y-m-00预测Y-00-00Y-m-d或有效的date_parse

// $date_string = '2014-10-20';
// $date_string = '2014-10-00';
$date_string = '2014-00-00';
$d = date_parse($date_string);
$myDateTime = new DateTime();
$myDateTime->setDate($d['year'], $d['month'] ? $d['month'] : 1, $d['day'] ? $d['day'] : 1);
print_r($myDateTime);

旁注:如果您的输入为Y-00-00,则会将当前日期的月份和日期设置为相应的输入年份。

答案 2 :(得分:-2)

使用date()代替其他人。

http://www.w3schools.com/php/php_date.asp

示例:

<?php
echo date("Y-m-d");
?>

仅限年份:

<?php
echo date("Y");
?>

短月和年(例如2016年1月)

<?php
echo date("M").' '.date("Y");
?>