PHP以错误的格式捕获日期

时间:2017-10-30 12:22:45

标签: php date

我知道可能有一个简单的答案,但我已经尝试了几件事似乎没有任何效果。

我从JSON数组中获取以下数据:

{
"Id": 21973679,
"InvoiceNumber": 13,
"IssueDate": "14/08/2017",
"EulerID": 6162023,
"CustomerName": "Alderley plc",
"TotalAmount": "1,704.00",
"TotalTaxAmount": 0,
"Currency": "USD",
"DueDate": "13/09/2017",
"AmountDue": "0",
"Status": "Paid"
},
{
"Id": 21974783,
"InvoiceNumber": 23,
"IssueDate": "09/01/2017",
"EulerID": 6162023,
"CustomerName": "Alderley plc",
"TotalAmount": "11,000.00",
"TotalTaxAmount": 0,
"Currency": "GBP",
"DueDate": "08/02/2017",
"AmountDue": "0",
"Status": "Paid"
}, 

我正在尝试获取IssueDate和DueDate。两者都以dd / mm / yyyy格式存储。无论我做什么,php似乎都无法持续捕获它们。

$report_starting_date=$item1['IssueDate'];

$report_starting_date=date('d/m/Y',strtotime($report_starting_date));

对于第二项发票(23),如果我回复它将返回1的月份,它可以正常工作,这似乎有效,因为日期可以是dd / mm或mm / dd但是在第1项发票中(13)14不能一个月,所以PHP似乎将日期设置为01/01/1970。我不知道为什么我可以存储一个正确的项而不是另一个?

由于

4 个答案:

答案 0 :(得分:5)

根据PHP documentation支持的格式,"X"不支持dd / mm / YYYY。

您可以使用strtotime功能,文档为here

createFromFormat

答案 1 :(得分:2)

试试这个:

$date = DateTime::createFromFormat('d/m/Y', $item1['IssueDate']);

相同的:

$date = date_create_from_format('d/m/Y', $item1['IssueDate']);

CreateFromFormat doc

$date中您有DateTime类的实例,因此您可以使用format()方法打印价值$date->format('d/m/Y');

Format method doc

答案 2 :(得分:0)

格式' dd / mm / yyyy' strtotime不支持。用破折号替换斜线可以解决您的问题。

$time = strtotime(str_replace('/', '-', $item1['IssueDate']);
$report_starting_date = date('d/m/Y', $time);

请注意,这更像是一种不完全失败的解决方法。 @ kchason的回答可能是更好的选择。

答案 3 :(得分:0)

您可以使用以下代码将日期字符串转换为日期。你需要供应 日期格式为第一个参数,日期字符串格式为第二个参数。

$date = DateTime::createFromFormat('d/m/Y', $item1['IssueDate'])->format('d/m/Y');

函数format()以提供的格式将字符串作为字符串返回。