使用php获取两个时间/日期之间的差异?

11 浏览
0 Comments

使用php获取两个时间/日期之间的差异?

我想要用php找出两个日期之间的分钟时间差,日期的格式是d-m-Y H:i(例如14-04-2009 12:15)。

0
0 Comments

在上述代码中,问题的出现可以归结为两个方面:原始日期格式的不一致以及计算时间差的需求。

首先,原始日期格式的不一致导致了两个时间的比较困难。其中一个时间是通过`date`函数获取的,格式为`'m/d/Y H:i:s'`,另一个时间是从资源中获取,格式为`'d/m/Y h:i:s A'`。这两个格式的不同导致了时间的比较变得复杂。

其次,需要计算两个时间之间的差异。代码中使用了`DateTime`类和`diff`方法来计算两个时间的差异。然后,通过访问`$interval`对象的`d`、`h`和`s`属性来获取差异的天数、小时数和秒数。

为了解决这个问题,可以采取以下步骤:

1. 首先,需要确保所使用的时区正确。在代码中通过`date_default_timezone_set`函数设置时区为`Asia/Kolkata`,确保时间的一致性。

2. 然后,需要将原始日期字符串转换为统一的格式。通过`DateTime::createFromFormat`函数将`$row['model_creation_time']`的格式从`'d/m/Y h:i:s A'`转换为`'m/d/Y H:i:s'`,并将其赋值给`$new_date_format`。

3. 接下来,将转换后的日期字符串使用`strtotime`函数转换为时间戳,并通过`date`函数将时间戳格式化为`'Y-m-d H:i:s'`的格式。

4. 然后,使用`DateTime`类创建`$model_current_time`和`$model_creation_time`的对象。

5. 最后,通过`diff`方法计算两个时间对象之间的差异,并通过访问`$interval`对象的属性获取差异的天数、小时数和秒数。

通过以上步骤可以解决获取两个时间/日期之间差异的问题。以下是代码的整理结果:


date_default_timezone_set('Asia/Kolkata');
$currentDateTime = date('m/d/Y H:i:s');
$model_current_time = date('Y-m-d H:i:s', strtotime($currentDateTime));
echo $model_current_time."------";
$date = DateTime::createFromFormat('d/m/Y h:i:s A', $row['model_creation_time']);//get from resouses
$new_date_format = $date->format('m/d/Y H:i:s');
$model_creation_time = date('Y-m-d H:i:s', strtotime($new_date_format));
echo $model_creation_time;
$datetime1 = new DateTime($model_current_time);
$datetime2 = new DateTime($model_creation_time);
$interval = $datetime1->diff($datetime2);
echo $interval->d;
echo $interval->h;
echo $interval->s;

以上代码将正确获取两个时间/日期之间的差异,并输出差异的天数、小时数和秒数。

0
0 Comments

问题的出现原因是使用strtotime()函数解析时间时,可能会导致意外的结果,因为所使用的日期格式不是标准的美式英语格式。strtotime()函数在使用连字符作为分隔符时,会假设日期是欧洲/澳大利亚格式(dd-mm-yyyy),而使用正斜杠分隔符时,则会假设日期是美式格式(mm-dd-yyyy)。

解决方法是,在解析日期之前,先检查日期格式是否满足标准的美式英语格式。如果日期格式不正确,可以通过解析并交换日和月来纠正格式。

下面是一个示例代码,展示了如何解析时间并计算两个时间之间的差异(以分钟为单位):

// 给定的日期
$date1 = "01-15-2022";
$date2 = "01-14-2022";
// 解析时间戳并计算差异(以秒为单位)
$difference = strtotime($date1) - strtotime($date2);
// 计算差异(以分钟为单位)
$difference_in_minutes = $difference / 60;

通过使用strtotime()函数解析时间戳,并使用数学函数进行计算,我们可以获得两个时间之间的差异(以分钟为单位)。

请注意,如果你的日期格式不是标准的美式英语格式,你可能需要根据具体情况调整代码。你可以参考PHP官方文档中有关strtotime()函数的说明,了解更多使用方法和参数的细节。

参考资料: strtotime()

0