【问题标题】:PHP Capturing Date in wrong formatPHP捕获日期格式错误
【发布时间】:2017-10-30 12:22:45
【问题描述】:

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

我从 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));

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

谢谢

【问题讨论】:

  • 你检查过你正在为日期函数解析正确的值吗? echo $item1['IssueDate'];和 $item2['IssueDate'] 并检查是否。字符串是正确的。当字符串有问题时会出现此错误。
  • 带有/ 的日期被视为美国格式 (mm/dd/YYYY),14 不是有效月份
  • 嗨,马克,是的,我想我可能是这样的,但日期必须带有 / 并且我需要英国格式的日期

标签: php date


【解决方案1】:

根据支持格式的PHP documentationstrtotime 不支持 dd/mm/YYYY。

你可以使用createFromFormat函数,文档是here

<?php
$date = date_create_from_format('d/m/Y', $item1['IssueDate']);
echo date_format($date, 'Y-m-d');
?>

【讨论】:

    【解决方案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-&gt;format('d/m/Y');

    Format method doc

    【讨论】:

    • 当我这样做时,我得到 - DateTime 类的对象无法转换为字符串
    • $date你得到了DateTime类的实例,所以你可以使用format()方法打印它$date-&gt;format('d/m/Y');
    【解决方案3】:

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

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

    请注意,这更像是一种解决方法,它不是完全故障保存。 @kchason 的回答可能是这里更好的选择。

    【讨论】:

    • 我已经尝试过了,但它仍然将日期存储为 mm/dd/yyyy
    【解决方案4】:

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

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

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

    【讨论】:

    • 我用这个我告诉它回显发票的完整日期和月份 (23) 我得到 - 09/01/2017 - 09 - 但是发票 (13) 我得到 14/08/2017 - 01 - 现在更奇怪了,01 月不在日期中
    猜你喜欢
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多