【问题标题】:How to find out what the date was 5 days ago?如何找出 5 天前的日期?
【发布时间】:2010-04-25 16:20:02
【问题描述】:

嗯,以下返回 5 天前的日期:

$days_ago = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d") - 5, date("Y")));

但是,我如何找到从任何日期 5 天前的内容,而不仅仅是今天?

例如:2008-12-02 之前的 5 天是什么时候?

【问题讨论】:

    标签: php


    【解决方案1】:

    我认为一种可读的方式是:

    $days_ago = date('Y-m-d', strtotime('-5 days', strtotime('2008-12-02')));
    

    【讨论】:

    • 我认为日期应该是一个参数,比如 $dateNow = (new \DateTime())->format('d-m-Y'); $daysAgo = date('d-m-Y', strtotime('-5 days', strtotime($dateNow)));
    • $n5_daysAgo = date('Y-m-d', strtotime('-5 days', time())); @Limon 我觉得更好
    • 由于 strtotime 有默认的第二个参数time()$n5_daysAgo = date('Y-m-d', strtotime('-5 days')); 足以让代码更简洁
    【解决方案2】:

    在 php 中找出从今天起 5 天前的日期

    $date = strtotime(date("Y-m-d", strtotime("-5 day")));
    

    在php中找出从今天起n天前的日期

    $date = strtotime(date("Y-m-d", strtotime("-n day")));
    

    【讨论】:

    • 在 date() 上执行 strtotime() 很奇怪,而且完全没有必要
    • 我认为'strtotime() on date()'是将时间设置为12am,而不是now()
    【解决方案3】:

    从特定日期起 5 天前:

    $date = new DateTime('2008-12-02');
    $date->sub(new DateInterval('P5D'));
    echo $date->format('Y-m-d') . "\n";
    

    【讨论】:

      【解决方案4】:
      define('SECONDS_PER_DAY', 86400);
      $days_ago = date('Y-m-d', time() - 5 * SECONDS_PER_DAY);
      

      除此之外,您可以在任何日期使用strtotime

      $days_ago = date('Y-m-d', strtotime('January 18, 2034') - 5 * SECONDS_PER_DAY);
      

      或者,如你所用,mktime:

      $days_ago = date('Y-m-d', mktime(0, 0, 0, 12, 2, 2008) - 5 * SECONDS_PER_DAY);
      

      嗯,你明白了。关键是要从时间戳中删除足够多的秒数。

      【讨论】:

      • 酷,但我在变量 $the_date 中有日期 2008-12-02。在这种情况下,该怎么办?
      【解决方案5】:

      试试这个

      $date = date("Y-m-d", strtotime("-5 day"));
      

      【讨论】:

        【解决方案6】:

        只需这样做......希望它有效

        $fifteendaysago = date_create('15 days ago');
        echo date_format($fifteendaysago, 'Y-m-d');
        

        【讨论】:

          【解决方案7】:

          如果您想要一种知道算法的方法,或者上一个答案中提到的函数不可用:将日期转换为儒略日数(这是一种从公元前 4713 年 1 月 1 日开始计算天数的方法) ,然后减去五,然后转换回日历日期(年、月、日)。两种转换的算法来源是http://www.hermetic.ch/cal_stud/jdn.htmhttp://en.wikipedia.org/wiki/Julian_day的第9节

          【讨论】:

            【解决方案8】:

            使用内置的 date_sub 和 date_add 函数来计算日期。 (见http://php.net/manual/en/datetime.sub.php

            与 Sazzad 的回答类似,但采用 PHP 程序风格,

            $date = date_create('2008-12-02');
            date_sub($date, date_interval_create_from_date_string('5 days'));
            echo date_format($date, 'Y-m-d'); //outputs 2008-11-27
            

            【讨论】:

              【解决方案9】:

              日期操作的通用算法将日期与儒略日数相互转换。以下是此类算法描述的链接、当前已知最佳算法的描述以及每种算法的数学证明: http://web.archive.org/web/20140910060704/http://mysite.verizon.net/aesir_research/date/date0.htm

              【讨论】:

                【解决方案10】:

                找到相同的简单方法是

                $date = date("Y-m-d", strtotime('-5 days', strtotime('input_date')));
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2013-10-31
                  • 1970-01-01
                  • 2010-10-21
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-02-23
                  相关资源
                  最近更新 更多