【问题标题】:Comparing two SQL dates with PHP [duplicate]用 PHP 比较两个 SQL 日期 [重复]
【发布时间】:2011-09-28 21:57:21
【问题描述】:

可能重复:
How to find number of days between two dates using php

我正在尝试比较存储在两个 PHP 变量中的两个日期。 $curDate$prevDateyyyy-mm-dd 的格式存储。为了简单地显示它们,我一直在使用date("n,j,Y", strtotime($prevDate)) 或日期函数的第一个参数的其他组合。

我想比较 $curDate$prevDate 的天数,但问题是,第 31 天可能是第 1 天的第 1 天,所以如果我以这种方式查看日期,那么我可以'无法处理这种行为。

我查看了 PHP 函数 JulianToJD(),但不能只传递 SQL 日期,通过 date()strtotime() 函数格式化。

谁能帮我想出一个聪明的方法来比较两个日期,同时注意月末?

【问题讨论】:

标签: php mysql html


【解决方案1】:

请参阅 stackoverflow.com/q/2040560/469210。 IE。计算日期的差异并应用 floor 函数:

floor($datediff/(60*60*24));

【讨论】:

    【解决方案2】:

    你可以通过两种方式做到这一点:

    MySQL:

    SELECT (TO_DAYS(curDate) - TO_DAYS(prevDate)) as Days ...
    

    这会给你天数的差异(TO_DAYS() 返回自第 0 年以来的天数)

    PHP,使用DateTime:

    $prev = DateTime::CreateFromFormat('Y-m-d', $prevDate);
    $cur = DateTime::CreateFromFormat('Y-m-d', $curDate);
    
    $days = $cur->diff($prev)->format('%a');
    

    【讨论】:

    • 这看起来不错,但是,我在 PHP 的第一行出现错误,$prev=....:`解析错误:语法错误,意外的 T_STRING,期待 T_VARIABLE 或 '$'
    • 糟糕,抱歉。取出“新”部分。我会编辑答案。
    • +1 我不喜欢 MySQL 的方式; PHP 方式又好又干净!
    • @Marc 取出new 确实修复了该错误,但我认为这不能正常工作。我打印出$prevDate$curDate,它们分别是2011-03-122011-07-04。几天的输出是6015???
    • @Marc 作为旁注,这些日期输出本质上可能看起来与月/日不明确,但它们采用 Y-m-d 格式。
    猜你喜欢
    • 2014-07-16
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多