我知道这个问题被问了几百万次,而且我相信我读了所有这些问题,但我觉得我混淆了一些东西,而且我很难理解为什么。
我的目标是找出一个日期是否超过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
,但我怎么能确定,我怎样才能使一切正常?
提前谢谢
答案 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()
查看服务器默认的时区)
注意我使用strtotime()
而不是date(),然后除以3600来获得小时而不是秒。您应该使用DateTime::createFromFormat()
而不是手动修改日期。