PHP DateTime字符串到目前为止无效

时间:2017-11-01 02:50:07

标签: php datetime

我有以下PHP代码将任意String转换为DateTime参数,然后转换为两个日期之间的间隔。但它不起作用。问题是什么?

//$dateOfBoat = '2017 29 Dec 05:13:37 AM '
$date = date_create_from_format('Y d M h:i:s A', $dateOfBoat);
$dateTime = date_format($date, 'Y-m-d H:i:s');

//Time now - THIS WORKS FINE
$date_now = time();

$boatFinishDateTime = strtotime($dateTime);

//Find interval between two dates
$interval = $date_now-$boatFinishDateTime;

感谢。

1 个答案:

答案 0 :(得分:2)

感谢您发布其余代码,请参阅此小提琴

http://sandbox.onlinephpfunctions.com/code/78d2b6613dbadff5a79ab7ebed3cba304f1188fe

这是代码

$DateTime = date_create_from_format('d M, h:i:s A ', $dateOfBoat);
$boatFinished = $DateTime->getTimestamp();
print_r("boatFinished: $boatFinished\n");

$now = time();
print_r("now: $now\n");

//Find interval between two dates
$interval = time()-$boatFinished;
print_r("Interval: $interval");

输出

boatFinished: 1514553217
now: 1509506464
Interval: -5046753

我们可以简化事情并利用我们的DateTime对象。因此,无需将DateTime中的日期作为格式化字符串输出,然后将其转换为时间戳。我们可以使用它的getTimestamp()方法直接从dateTime对象获取时间戳。

一旦我们将它作为unix时间戳,其余的都非常简单(你已经拥有)。获取当前时间time()这是一个时间戳。然后我们只是减去它们,我们得到两个事件之间的秒数。

你非常接近。

<强>更新

请参阅第二小提琴

http://sandbox.onlinephpfunctions.com/code/7d13d0319e266906df22624e701586914627f9dd

第一个是我称之为天真的实现,这意味着它没有考虑足够的边缘情况。为此,我将其归类为输入,而不是我们期望的$dateOfBoat变量。我能想到的主要是

  1. 空输入
  2. 输入格式无效或值完全错误
  3. 对于这两个,我们可以检查DateTime对象是否是使用简单的布尔比较创建的。在我们尝试创建DateTime之后,但在我们使用它之前,我们只需添加一个简单的条件,如下所示:

    $DateTime = date_create_from_format('d M, h:i:s A ', $dateOfBoat);
    
    if( !$DateTime )  //check that our DateTime object was properly created
        throw new Exception("Invalid dateOfBoat input[{.$dateOfBoat}]");
    
    $boatFinished = $DateTime->getTimestamp();
    

    这里我只是抛出一个异常,由您来决定如何在应用程序中处理此问题。但是提出异常并在调用它时处理它当然是一种选择。

    干杯!