两个字符串与时间和工作日之间的差异

时间:2015-12-23 10:56:01

标签: php mysql

我在数据库中保存了两次

DayTime1 = "Wed 09:00"
DayTime2 = "Wed 13:00"

我希望在几分钟内得出这两个日期之间的差异。

TIMESTAMPDIFF(MINUTES,DayTime1,DayTime2) return null

我无法通过它。有什么方法可以改变吗?

2 个答案:

答案 0 :(得分:2)

由于您还包含了php - 标记,我假设PHP解决方案也是有效的:

$daytime1 = "Wed 09:00";
$daytime2 = "Wed 13:00";
$diff = abs(strtotime($daytime1) - strtotime($daytime2)); //absolute diff in seconds
$diff = $diff / 60; //Difference in minutes

修改

这是一个纯粹的MySQL解决方案:

SELECT ABS(
    TIME_TO_SEC(
        TIMEDIFF(
            STR_TO_DATE("Wed 09:00", "%a %H:%i"),
            STR_TO_DATE("Wed 13:00", "%a %H:%i")
        )
    )
) / 60

第二个参数"%a %H:%i"是日期格式。如果它的格式始终为"工作日的前三个字母,空格,带前导零的小时,:,分钟"那么你可以使用这种格式。

答案 1 :(得分:2)

请注意,SELECT STR_TO_DATE("Wed 09:00", "%a %H:%i")会返回 0000-00-00 09:00:00(至少在我的本地MySql 5.5.16上)。因此,如果比较不同的日期,您将无法获得正确的结果。

如果给出一年和一周,日期名称将被解释为实际日期,因此比较也可能跨越几天。例如(虽然不是很优雅,但我承认):

SELECT TIMESTAMPDIFF(MINUTE,
    STR_TO_DATE(CONCAT(YEAR(CURDATE()), WEEKOFYEAR(CURDATE()), ' Tue 09:00'), '%x%v %a %H:%i'),
    STR_TO_DATE(CONCAT(YEAR(CURDATE()), WEEKOFYEAR(CURDATE()), ' Wed 13:00'), '%x%v %a %H:%i')
)