【问题标题】:Fastest way to get month, day, year, from date string从日期字符串中获取月、日、年的最快方法
【发布时间】:2017-02-16 02:24:26
【问题描述】:

我正在从 mysql 数据库中获取日期:

结果如下:

2017-01-20

获取月、日、年最快的方法是什么,例如,当我回显时,它将是这样的:

echo $month; //01
echo $day; //20
echo $year; //2017

【问题讨论】:

  • 提示:mysql 中的month('2017-01-20'), year('2017-01-20'), day('2017-01-20')

标签: php mysql database string date


【解决方案1】:

好吧,如果您知道输出将始终是格式为“YYYY-MM-DD”的字符串,那么最基本的方法是:

<?php

    $query = ... //query is your string "YYYY-MM-DD"
    $year = substr($query, 0, 4);
    $month = substr($query, 5, 2);
    $day = substr($query, 8, 2);

    echo $month;
    echo $day;
    echo $year;
?>

【讨论】:

  • substr 的第三个参数是长度,而不是位置。所以第一个应该是$year = substr($date, 0, 4);等等。
  • 我为语言混乱道歉。我的答案已被编辑。谢谢!
  • 抱歉又出bug了,但是月日需要长度为2,长度不是从0开始的。
  • 谢谢!我把 length=0 误认为是检索字符,而不是 length=1
【解决方案2】:

假设您在名为 $date 的变量中拥有该字符串

$date = '2017-01-20';

如果您确定格式一致,您可以将explode 转换为list

list($year, $month, $day) = explode("-", $date, 3);

您可以使用strtotime 将日期转换为时间整数,以便在date 等其他函数中使用。这还有一个额外的好处,就是能够测试这是一个格式良好的日期:

$time = strtotime($date);
if ($time === false) die("Bad date format: $date.");
$year = date('Y', $time);
$month = date('m', $time); // 'n' if you don't want leading zero
$day = date('d', $time);   // 'j' if you don't want leading zero

正如jasonmoqio 指出的那样,由于您要求最快,substr 比爆炸要快一点。 (在我的工作站上,循环 substr 与爆炸 1000 万次仅比爆炸产生了 1/1000 秒的改进,因此除非这是在运行数百万次的循环中,否则您不会注意到差异,应该选择代码可读性。)

$year = substr($date, 0, 4);
$month = substr($date, 5, 2);
$day = substr($date, 8, 2);

【讨论】:

    【解决方案3】:

    试试这个:

    $date = new DateTime('2017-01-20');
    echo 'Year:'.$date->format("Y");
    echo 'Month:'.$date->format("m");
    echo 'Day:'.$date->format("d");
    

    输出:

    Year:  2017
    Month: 01
    Day:   20
    

    【讨论】:

      【解决方案4】:

      如果你想快速从 mysql 中获取日期,请尝试像这样使用正则表达式。

      if (preg_match('/^(?P<year>\d+)[-\/](?P<month>\d+)[-\/](?P<day>\d+)$/', $your_date, $matches)) {
          $mydate = $matches['year'] . "-" . $matches['month'] . "-" . $matches['day'];
          $whatever = date('Y-m-d', strtotime($tgl));
          // You can echo it...
          // echo $matches['year'];
          // echo $matches['month'];
          // echo $matches['day'];
      }
      

      希望这对您有所帮助。 :D

      【讨论】:

        猜你喜欢
        • 2020-12-19
        • 2014-03-24
        • 1970-01-01
        • 2021-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多