我有一个问题。 API的日期在2016年2月4日回复给我。我必须应用一些日期修改,我需要的日期格式为02-04-2016。该代码适用于从9返回的API返回的日期,例如2016年2月10日,因为当我操纵它时,我得到它整齐地在02-10-2016。然而,问题是日期低于10,例如2016年2月4日,因为这些导致02-4-2016导致错误。
我想知道的是我如何能够始终如一地获得02-04-2016的格式,无论API的日期是9还是9以下。以下是我的代码。
// Split checkin date string from API
list($month, $day, $year, $time) = explode(' ', $checkindate);
// change short month name (e.g Feb) to month number (e.g. 02)
$monthname = $month;
$month = date('m', strtotime($monthname));
// new checkin date in example format 02-20-2016
$checkin_new = $month.'/'.$day.'/'.$year; // this is the part that causes an error when date returned by API is below 10, for example Feb 4 2016. Other dates above 9 such as Feb 10 2016 work well and don't cause an issue.
// Subtract days
$newdate = new DateTime($checkin_new );
$subtracteddate = $newdate->modify("-1 day");
答案 0 :(得分:1)
要在2月份获取日期,请使用mktime
功能:
echo date("M d Y ", mktime( 0,0,0,2, 4, 2016));
echo "<br />";
echo gmdate("M d Y ", mktime( 0,0,0,2, 2, 2016));
这会产生输出:
Feb 04 2016
Feb 01 2016
答案 1 :(得分:0)
$formatted_date = date('m-d-Y', strtotime($chekindate));
答案 2 :(得分:0)
尝试直接使用函数strtotime
:
echo date('m-d-Y', strtotime('Feb 4 2016'));
答案 3 :(得分:0)
我设法想到了一个解决方案。可能不太理想,但它确实有效。
基本上,问题是我需要在之前添加0,例如4,当天低于10.天高于9的天已经好了。所以我写了一个简单的if语句并在代码中连接它。更新的部分以粗体显示
// Split checkin date string from API
list($month, $day, $year, $time) = explode(' ', $checkindate);
// if day is below 9, give var patchday value 0. Otherwise leave it empty
**if ($day < 10) { $patchday = "0"; } else { $patchday = ""; };**
// change short month name (e.g Feb) to month number (e.g. 02)
$monthname = $month;
$month = date('m', strtotime($monthname));
// new checkin date in example format 02-20-2016
$checkin_new = $month.'/'.**$patchday**.$day.'/'.$year;
// Subtract days
$newdate = new DateTime($checkin_new );
$subtracteddate = $newdate->modify("-1 day");
答案 4 :(得分:0)
使用可以接受多种格式的DateTime对象
echo (new DateTime('Feb 4 2016'))->format('m-d-Y');
答案 5 :(得分:0)
您应该使用DateTime::createFromFormat
方法,接受月份,不带前导零,三个月字母,以及介于两者之间的空格,方法是使用F j Y
这样;
$date = DateTime::createFromFormat('F j Y', $checkindate);
然后格式化,就像这样;
$formatteddate = $date->format('m-d-Y');
如果时间也是从API返回的,那么您只需要以正确的格式(可以在文档页面上找到)将其添加到createFromFormat
字符串中,例如H:i:s
;
$date = DateTime::createFromFormat('F j Y H:i:s', $checkindate);