【问题标题】:how to get date of yesterday using php?如何使用php获取昨天的日期?
【发布时间】:2013-04-15 06:42:49
【问题描述】:

我想在 php 中使用特定日期格式获取昨天的日期,格式如下:

$today = date("d.m.Y"); //15.04.2013

有可能吗?

考虑月份和年份是否应该分别更改。

【问题讨论】:

  • date("d.m.y", time() - 60 * 60 * 24);
  • 你试过我的解决方案了吗?这也适用于不断变化的月份
  • 我上面的用户名“noob”为其评论增添了美好意义的完美时刻:)

标签: php date


【解决方案1】:

你来了

date('d.m.Y',strtotime("-1 days"));

如果月份更改,这也将起作用

【讨论】:

  • 一个小小的挑剔:如果该时间跨越 DST 更改,您的函数会在午夜附近遇到麻烦。明确地超过中午有帮助。
  • 错误。关于 DST 的 3 件事: 1 它取决于服务器时间,如果服务器有正确的时区,它不会影响我的功能。 2 不是整个世界都受到夏令时的影响,有些地方不使用它。 3 大多数地方都会在一天的头几个小时(例如凌晨 2 点或 3 点)更改时间,因此不会影响一天的变化。
  • 1.所以该函数知道并注意一天可以不是 24 小时? 2. 即使是坏掉的时钟,每天也能正确两次。 3. 被盗/复制的确切时间对于计算并不重要。
  • 没有意义 1 一天是 24 点,直到 DST 更改时间,服务器根据 2 更改时间当然是,但这不是重点 3 这是非常重要的是,如果时间在午夜而不是其他时间改变,你的想法可能是正确的
【解决方案2】:

PHP 中的昨天日期:

echo date("Y-m-d", strtotime("yesterday")); 

【讨论】:

    【解决方案3】:

    如果您在 PHP 应用程序中定义 timezone(您应该这样做),您可以这样做:

    date_default_timezone_set('Europe/Paris');
    

    那么就这么简单:

    $yesterday = new DateTime('yesterday'); // will use our default timezone, Paris
    echo $yesterday->format('Y-m-d'); // or whatever format you want
    

    (您可能需要定义一个常量或环境变量来存储您的默认时区。)

    【讨论】:

      【解决方案4】:

      试试这个

              $tz    = new DateTimeZone('Your Time Zone');
              $date  = new DateTime($today,$tz);
              $interval = new DateInterval('P1D');
              $date->sub($interval); 
      
              echo $date->format('d.m.y');
      
              ?>           
      

      【讨论】:

      • 看到这个php.net/manual/en/book.datetime.php' .. 这也适用于月份变化
      • 新日期时间('昨天')
      • $yesterday = new DateTime('yesterday', new DateTimeZone('Your Time Zone'));
      • 用这个纯代码的答案做一点解释会很好。
      【解决方案5】:

      你可以这样做

      date("F j, Y", time() - 60 * 60 * 24);
      

      或通过

      date("F j, Y", strtotime("yesterday"));
      

      【讨论】:

      • 不保证夏时制......这些天人们真的应该使用 DateTime 对象
      • 如果在 UTC 时间运行,将可以正常工作。 date_default_timezone_set('UTC');
      【解决方案6】:

      第 1 步

      我们需要在函数 date() 中设置格式数据: 函数 date() 使用给定的整数时间戳或当前时间(如果没有给出时间戳)返回根据给定格式字符串格式化的字符串。换句话说,timestamp 是可选的,默认为 time() 的值。

      <?php
      echo date("F j, Y");
      ?>
      

      结果: 2010 年 3 月 30 日

      第 2 步

      对于“昨天”日期,使用 php 函数 mktime(): 函数 mktime() 返回与给定参数对应的 Unix 时间戳。此时间戳是一个长整数,包含 Unix 纪元(1970 年 1 月 1 日 00:00:00 GMT)和指定时间之间的秒数。 参数可以按从右到左的顺序省略;任何被省略的参数都将根据本地日期和时间设置为当前值。

      <?php
      echo mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
      ?>
      

      结果: 1269820800

      第 3 步

      现在合并所有,看看这个:

      <?php
      $yesterday = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d")-1,date("Y")));
      echo $yesterday;
      ?>
      

      结果: 2010 年 3 月 29 日

      操作类似,可以接收时间倒退。

      <?php
      $yesterday = date("H:i:s",mktime(date("H"), 0, 0, date("m"),date("d"), date("Y")));
      echo $yesterday;
      ?>
      

      结果: 20:00:00

      或 7 天前:

      <?php
      $week = date("Y-m-d",mktime(0, 0, 0, date("m"), date("d")-7,date("Y")));
      echo $week;
      ?>
      

      结果: 2010-03-23

      【讨论】:

        【解决方案7】:

        另一种设置精确小时的日期时间 OOP 方法:

        $yesterday = new DateTime("yesterday 09:00:59", new DateTimeZone('Europe/London'));
        echo $yesterday->format('Y-m-d H:i:s') . "\n";
        

        【讨论】:

          【解决方案8】:

          大多数答案都采用程序/混合风格。这是纯 OOP 风格的解决方案:

          $today = new DateTime();
          $yesterday = $today->sub(new DateInterval("P1D"));
          echo $yesterday->format("d.m.Y");
          

          它也会处理夏令时和时区问题。简单的解决方案。

          【讨论】:

            【解决方案9】:

            试试这个

            <?php
            $yesterday = date(“d.m.Y”, time()-86400);
            echo $yesterday;
            

            【讨论】:

            • 由于夏令时一天并不总是有86400秒!所以这个计算每年可能会出错两次!
            • ...由于闰秒。
            【解决方案10】:

            您也可以使用Carbon 库来执行此操作:

            Carbon::yesterday()->format('d.m.Y');         // '26.03.2019'
            

            其他格式:

            Carbon::yesterday()->toDateString();          // '2019-03-26'
            Carbon::yesterday()->toDateTimeString();      // '2019-03-26 00:00:00'
            
            Carbon::yesterday()->toFormattedDateString(); // 'Mar 26, 2019'
            Carbon::yesterday()->toDayDateTimeString();   // 'Tue, Mar 26, 2019 12:00 AM'
            

            【讨论】:

            • 如果您的项目中有这么多日期/时间可供使用,这是一个好主意。使其易于开发。但是如果你只有很少的案例要转换,你最好用纯 PHP 来做,因为系统性能。
            【解决方案11】:

            我们可以使用 Fancy 方法。 就像昨天这样。到今天

            $date = new DateTime; // example 2021-04-02
            date_sub($date, date_interval_create_from_date_string('1 days')); 
            $date = date_format($date, 'Y-m-d'); // Output will be 2021-04-01
            

            或者我们可以像这样在特定日期之前找到昨天。

            $date = date_create('2021-04-06');
            date_sub($date, date_interval_create_from_date_string('5 days'));
            $date = date_format($date, 'Y-m-d'); // The output will be 2021-04-01
            

            【讨论】:

            • 不要将 OOP 与过程式风格混为一谈,尽管它可以工作。
            【解决方案12】:

            创建函数

            function getYesterday()
            {
                return \Carbon\Carbon::yesterday()->format('Y-m-d');
            }
            

            调用函数

            getYesterday();
            

            【讨论】:

            • 这是正确的,但前提是您使用“Carbon API”。对于这种情况,PHP 本身有一个简单的方法。
            猜你喜欢
            • 2015-10-05
            • 1970-01-01
            • 1970-01-01
            • 2011-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-03-31
            • 1970-01-01
            相关资源
            最近更新 更多