【问题标题】:PHP: simplest way to get the date of the month 6 months prior on the first?PHP:最简单的方法是在第一个 6 个月前获取月份的日期?
【发布时间】:2011-02-07 04:51:40
【问题描述】:

如果今天是 2010 年 4 月 12 日 它应该在 2009 年 10 月 1 日返回

我用谷歌搜索的一些可能的解决方案似乎过于复杂,有什么建议吗?

【问题讨论】:

    标签: php datetime subtraction


    【解决方案1】:

    嗯,大概是这样的;

    echo date("F 1, Y", strtotime("-6 months"));
    

    编辑;

    如果您想指定自定义日期使用;

    echo date("F, 1 Y", strtotime("-6 months", strtotime("Feb 2, 2010")));
    

    【讨论】:

    • 除了逗号在格式字符串中的错误位置之外,这看起来是最好的解决方案(现在,它会显示“2009 年 10 月 1 日”而不是“2009 年 10 月 1 日” )。
    • @stormist,然后使用; date("F, 1 Y", strtotime("-6 个月", strtotime("2010 年 2 月 2 日")));
    • @Adnan,别忘了你可以将这两个调用合并到strtotime
    • @salathe,很好,我可以使用 date("F, 1 Y", strtotime("-6 months Feb 2, 2010"));谢谢。
    • 这还是有点慢的味道。解析日期和内容的字符串。它有效并且很短,这是肯定的
    【解决方案2】:

    有点 hackish 但有效:

    <?php
    
    $date = new DateTime("-6 months");
    $date->modify("-" . ($date->format('j')-1) . " days");
    echo $date->format('j, F Y');
    
    ?>
    

    【讨论】:

    • 哦,嘿,我没有意识到 DateTime 的构造函数接受了 -6 个月。我现在觉得自己很蠢。
    • 这也有效:new DateTime('first day of this month - 6 months')
    【解决方案3】:

    使用mktimedate 的组合:

    $date_half_a_year_ago = mktime(0, 0, 0, date('n')-6, 1, date('y'))
    

    要使新日期相对于给定日期而不是今天,请使用第二个参数调用 date

    $given_timestamp = getSomeDate();
    $date_half_a_year_ago = mktime(0, 0, 0, date('n', $given_timestamp)-6, 1, date('y', $given_timestamp))
    

    要格式化输出,只需再次使用date

    echo date('F j, Y', $date_half_a_year_ago);
    

    【讨论】:

    • 我这里没有 PHP 来测试这个,但是 mktime 甚至接受负月份吗?它被记录为对无效参数返回 false。
    • @omg unicorns,是的,来自文档:»mktime() 对于进行日期算术和验证很有用,因为它会自动计算超出范围输入的正确值。«跨度>
    【解决方案4】:

    在 cmets 中进行了讨论,但接受的答案有一些不需要的 strtotime() 调用。可以简化为:

    date("F 1, Y", strtotime("Feb 2, 2010 - 6 months"));
    

    另外,您可以像这样使用DateTime(),我认为它同样具有可读性:

    (new DateTime('Feb 2, 2010'))->modify('-6 months')->format('M 1, Y');
    

    或者使用静态方法....

    DateTime::createFromFormat('M j, Y','Feb 2, 2010')
        ->modify('-6 months')
        ->format('M 1, Y');
    

    【讨论】:

    • 谢谢,哪种方法更快?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-23
    • 2020-01-17
    • 2014-05-12
    • 2010-09-07
    • 2021-03-22
    • 1970-01-01
    相关资源
    最近更新 更多