【问题标题】:php convert a date to a timestampphp将日期转换为时间戳
【发布时间】:2013-12-17 13:55:39
【问题描述】:

我正在尝试将 2 个日期转换为时间戳。一个是php生成的(今天的日期),一个是用户输入的

$today = date("d-m-y");  // 01-12-13
$start_date = "28-11-13";

$todaytimestamp = strtotime($today);
$starttimestamp = strtotime($start_date);

echo "$today > $start_date <br>$todaytimestamp > $starttimestamp";

问题是结果不正确

结果:

01-12-13 > 28-11-13 1008201600 > 1857686400

怎么了?

【问题讨论】:

    标签: php string date time timestamp


    【解决方案1】:

    始终使用四位数的年份,因为使用两位数的年份会导致无休止的头痛。 13 不被视为一年;相反,01-12-1328-11-13 被 PHP 解释为 2001 年 12 月 13 日和 2028 年 11 月 13 日。请参阅PHP's Date Formats page,在“ISO8601 表示法”下:“带破折号的两位数年、月和日”。

    如果您改用2013,问题就会消失:

    $today = date("d-m-Y");  // 01-12-2013
    $start_date = "28-11-2013";
    
    $todaytimestamp = strtotime($today);
    $starttimestamp = strtotime($start_date);
    
    echo "$today > $start_date <br>$todaytimestamp > $starttimestamp";
    

    输出:

    01-12-2013 > 28-11-2013
    1385884800 > 1385625600
    

    【讨论】:

      【解决方案2】:

      我对文档的理解是,您正在尝试将可读字符串转换为基于 Unix 的时间戳。当您尝试转换 01-12-13 和 28-11-13 时,您将得到不希望的结果,因为 strtotime 函数不记得如何正确解释这些值。下面的代码应该可以帮助你。

      $today = date("jS M Y");  // 1st Dec 2013
      $start_date = "28th Nov 2013";
      
      $todaytimestamp = strtotime($today);
      $starttimestamp = strtotime($start_date);
      
      echo "$today > $start_date <br>$todaytimestamp > $starttimestamp";
      

      输出

      1st Dec 2013 > 28th Nov 2013
      1385877600 > 1385618400
      

      只需调整您的代码以适应语言的限制,如果这些值来自表单字段,您应该能够快速轻松地将它们转换为可读的日期。

      【讨论】:

        【解决方案3】:

        该函数假定您从一年开始 (检查:http://www.onlineconversion.com/unix_time.htm),更改为

         $start_date = "28-11-2013"; 
        

        这样函数就知道是哪一年了,它采用默认格式(如果没有记错的话)Y-d-m

        【讨论】:

          猜你喜欢
          • 2013-09-12
          • 2012-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-26
          • 1970-01-01
          • 2012-10-05
          • 2011-06-20
          相关资源
          最近更新 更多