代码之家  ›  专栏  ›  技术社区  ›  Toleo

从字符串中选择捕获的值

  •  0
  • Toleo  · 技术社区  · 7 年前

    我有一个时间表的字符串

    Jun 4, 2018 => Jun 12, 20018
    

    我要做的是获取每个日期的每个值,如下所示:

    $schedule = explode('=>', 'Jun 4, 2018 => Jun 12, 20018');
    foreach ($schedule as $date) {
        preg_match('/([a-z]{3})|(\b[0-9]{2}\b)|([0-9]{4})/i', $date, $values);
        $day = $values[1];
        $month = $values[0];
        $year = $values[2];
        echo $day.'-'.$month.'-'.$year;
    }
    

    我所期望的是从 preg_match() $values 根据它在字符串中的顺序,我期望的最终结果是

    4-6-2018
    12-6-2018
    

    样本也一样

       Jan 2007 =expected-result> 0-6-2018
       12 2007 =expected-result> 12-0-2018
       2007 =expected-result> 0-0-2018
    

    但是我得到了一个错误

    E_NOTICE : type 8 -- Undefined variable: value -- at line 8
    Jun-Jun-
    E_NOTICE : type 8 -- Undefined variable: value -- at line 8
    Jun-Jun-
    

    我不知道这是否可能 DateTime 而不是 RegEx 因为日期格式不是静态的,有三种不同的格式。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Mr Glass    7 年前

    您正在使用:

    $year = $value[2];
    

    但是你在$value的末尾缺少's'。更改为:

    $year = $values[2];
    

    顺便说一句,你可能会更容易使用类似的东西:

    $schedule = explode('=>', 'Jun 4, 2018 => Jun 12, 2018');
    $start = date('d-m-Y',strtotime($schedule[0])) ;
    $end = date('d-m-Y',strtotime($schedule[1])) ;
    
    推荐文章