【问题标题】:Unix Timestamp from custom string php来自自定义字符串 php 的 Unix 时间戳
【发布时间】:2016-03-17 16:09:51
【问题描述】:

我有一串字母,然后是一个月,然后是一年:

$followUpDate = 'M12-16'

我把月份和年份分开:

$datestrip = explode("-", $followUpDate);
$part1     = substr($datestrip[0], 1); // Gives Month
$part2     = $datestrip[1]; // Gives Year

现在我已经分解了月份和年份。我需要获取所述月份和年份的 unix 时间戳。

所以对于这个例子来说,unix 时间戳的结果应该是 1480568400。

提前谢谢你!

【问题讨论】:

    标签: php date unix unix-timestamp


    【解决方案1】:

    您可以使用DateTime::createFromFormat()(正如已经提到的其他答案)。但是,您必须注意一些小细节。

    因为您解析的字符串包含部分日期(仅指定月份和年份),所以默认情况下,使用当前时间设置其余字段(月份的日期、小时、分钟、秒) .很可能,这不是您想要的。我猜你想知道月初(第 1 天,午夜)。

    您可以通过在format string 前面添加一个感叹号 (!) 来获得此信息。它将所有日期组件重置为 Unix 纪元(1970-01-01 00:00:00 UTC)。

    另外,DateTime::createFromFormat() 的第三个参数是要使用的时区。如果您不通过它,PHP 将使用在php.ini 或最后一次调用date_default_timezone_set()(如果有的话)中设置的默认时区。这可能是您需要的,也可能不是。

    $followUpDate = 'M12-16';
    
    // It seems like your timezone is US/Eastern (GMT+5 during the winter)
    $timezone = new DateTimeZone('US/Eastern');
    
    // Create a DateTime out of the provided string
    // The "!" character in front of the format resets all the fields
    // to the Unix epoch (1970-01-01 00:00:00 UTC) before parsing the string
    $date = DateTime::createFromFormat('!\Mm-y', $followUpdate, $timezone);
    
    // Display it; it displays 1480568400
    echo($date->format("U"));
    

    【讨论】:

      【解决方案2】:

      看看strtotime

      $timestamp = strtotime("2016-12");
      echo date("Y-m-d", $timestamp); // prints 2016-12-01
      

      记住您的时区设置;)

      您还可以使用 php 的 DateTime 类来寻求更易读的方法:

      $date = new \DateTime();
      $date->setDate(2016, 12, 01);
      echo $date->format("Y-m-d"); // similiar to above
      

      【讨论】:

        【解决方案3】:

        做了一些假设,但以下代码应该适合您:

        $followUpDate = 'M12-16';
        $d = DateTime::createFromFormat('\Mm-y-d H:i:s', $followUpDate . '-01 00:00:00');
        
        echo $d->format('U');
        

        我绝对建议使用 DateTime 而不是 date(),因为它为您提供了额外的灵活性。

        【讨论】:

          【解决方案4】:

          下面是一个小代码sn-p,它可以帮助你快乐地前进:

          // Define your date
          $followUpDate = 'M12-16'
          
          // Convert your date to a DateTime object
          $date = DateTime::createFromFormat('\Mm-y', $followUpdate);
          
          // Output
          echo $date->format('Y-m-d');
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-09-30
            • 2019-07-14
            • 1970-01-01
            • 2020-06-07
            • 2013-04-18
            • 2011-03-23
            相关资源
            最近更新 更多