用dd / mm / yyyy格式解决两个日期之间的差异

时间:2018-02-12 15:16:07

标签: php date datetime

我知道这个问题被问了几百万次,而且我相信我读了所有这些问题,但我觉得我混淆了一些东西,而且我很难理解为什么。

我的目标是找出一个日期是否超过3分钟,"问题"格式如下:dd/mm/yyyy - HH:MM

自' - '我不接受DateTime个对象,我删除它并通过更改' /'到' - '在日期格式本身:

$date = "12/02/2018 - 14:23";
// I have to go one by one or the format will be messed up
$date = str_replace('/', '-', $test);
$date = str_replace(' -', '', $date); //$date = 12-02-2018 14:23
$difference = time() - date($test);

当我写这些行时,它是12/02/2018 - 16:12,但$difference会返回07:12:51,而它应该在01:49左右(更多)或更少)

我认为time()设置为格式为mm-dd-yyyy,但我怎么能确定,我怎样才能使一切正常?

提前谢谢

3 个答案:

答案 0 :(得分:3)

您可以使用DateTime类和createFromFormat()方法获取此内容而无需任何替换:

$test = "12/02/2018 - 14:23";
$d1 = DateTime::createFromFormat("d/m/Y - H:i", $test);
$interval = $d1->diff(new DateTime());
// or $interval = $d1->diff(new DateTime("now", $timezone));
echo $interval->format("%H:%I:%S") ; // 01:58:43

答案 1 :(得分:1)

您可以将原始字符串与strtotime() -

一起使用
$test = "12/02/2018 - 14:23";
$newTime = strtotime(trim(str_replace('/', '-', str_replace('-', '', $test))));
//returns 1518441780

然后您可以使用它进行比较:

$difference = time() - $newTime;

答案 2 :(得分:1)

你的问题不在于更换,而在于时区。你说这是16:12,但是你的服务器可能还有另一个时区设置,这就是你获得差异的原因。假设你在马德里(与你说的时间相符),

<?php
date_default_timezone_set('Europe/Madrid');

$date = "12/02/2018 - 14:23";
// I have to go one by one or the format will be messed up
$date = str_replace('/', '-', $date);
$date = str_replace(' -', '', $date); //$date = 12-02-2018 14:23
$difference = (time() - strtotime($date)) / 60 / 60;
echo $difference; // 2 hours and minutes

给你正确的区别。我使用date_default_timezone_set()手动设置时区。 (您可以使用date_default_timezone_get()查看服务器默认的时区)

Demo

注意我使用strtotime()而不是date(),然后除以3600来获得小时而不是秒。您应该使用DateTime::createFromFormat()而不是手动修改日期。