我有以下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;
感谢。
答案 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
变量。我能想到的主要是
对于这两个,我们可以检查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();
这里我只是抛出一个异常,由您来决定如何在应用程序中处理此问题。但是提出异常并在调用它时处理它当然是一种选择。
干杯!