【问题标题】:PHP mktime() is returning wrong datePHP mktime() 返回错误的日期
【发布时间】:2013-10-11 23:54:02
【问题描述】:

我用 mktime 做一些事情,我需要添加下一个日期多 30 天,但它返回我 1970-01-30 日期,我做错了什么?

$strtime=strtotime("2013-10-04");
$fecha=date("Y-m-d",$strtime);
echo $fecha."<br />";
$nueva_fecha=mktime(0,0,0,date("n",$fecha),date("j",$fecha)+30,date("Y",$fecha));
echo date("Y-m-d",$nueva_fecha)."<br />";

结果:

2013-10-04

1970-01-30

【问题讨论】:

  • 一定要mktime吗?
  • 还有其他方法吗?我只需要总结 30 天并得到新的日期。
  • 仅供参考,但我在您的 mktime 调用中收到了 3 次警告:注意:在第 6 行的 date.php 中遇到格式不正确的数值

标签: php date mktime


【解决方案1】:

你也可以用这个

<?php

$date      = date("Y/m/d"); // example date in yyyy/mm/dd format
$unix_time = strtotime( $date ); // covert date to unix time

$sec_in_30_days  = 60 * 60 * 24 * 30; // 60 seconds * 60 minutes * 24 hours * 30 days

$new_unix_time   = $unix_time + $sec_in_30_days; // add 30 days to unix time
$date_in_30_days = date( 'Y/m/d', $new_unix_time ); // convert new unix time to date

// Output results:
echo 'original current date: ' . $date . '<br />';
echo '<br />';
echo 'new date: ' . $date_in_30_days . '<br />';

?>

输出将是

原当前日期:2013/10/04

新日期:2013/11/03

【讨论】:

    【解决方案2】:

    您可以使用以下函数将您输入的日期添加 30 天:

    $date = strtotime("2013-10-04");
    $new_date = strtotime("+30 days", $date);
    

    或简单到当前日期:

    $new_date = strototime("+30 days", time());
    

    【讨论】:

      【解决方案3】:

      日期正在寻找一个时间戳,因为它是第二个参数,而不是代表这个的字符串值。更新为传递 $strtime。

      $strtime=strtotime("2013-10-04");
      $fecha=date("Y-m-d",$strtime); // <-- Unnecessary unless you want to echo the value.
      echo $fecha."<br />";
      $nueva_fecha=mktime(0,0,0,date("n",$strtime),date("j",$strtime)+30,date("Y",$strtime));
      echo date("Y-m-d",$nueva_fecha)."<br />";
      

      输出:

      2013-10-04

      2013-11-03

      【讨论】:

        【解决方案4】:

        你可以试试这个:

        echo strtotime("+1 天"), "\n";

        echo strtotime("+30 day",strtotime(date('D, d M Y'))), "\n";

        这将使当前日期增加 30 天。

        strtotime 也非常有用,您可以每周、每月和每年使用它。

        【讨论】:

          【解决方案5】:

          如果你已经有了strtotime,为什么还要加上date?相反,您可以使用 +(以秒为单位的 30 天)或只是他们为您提供的功能+ 1 day 检查答案:adding one day to a date

          strtotime('2013-10-04 + 30 days');

          这将打印2013-11-03date('Y-m-d', strtotime('2013-10-04 + 30 days'))

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-02-05
            • 1970-01-01
            • 2014-10-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多