检查字符串中的年份是否大于2017年

时间:2017-07-21 17:00:47

标签: php

我有很多帖子,我想在今年发布的帖子中添加一些特别优惠。

offer name - July 20, 2015
offer name - July 20, 2016
offer name - July 20, 2017
...

我这样做:

$a = "offer name - July 20, 2000";
if (preg_match('/2017/',$a)) {
    echo 'offer';
}

它正在2017年工作,但我想在2017年和明年的帖子中添加优惠... 18,19。 任何想法?

5 个答案:

答案 0 :(得分:3)

此变体按年份迭代输入和过滤器:

<?php
$input = [
  'offer name - July 20, 2015',
  'offer name - July 20, 2016',
  'offer name - July 20, 2017'
];
$output = [];
array_walk($input, function($entry) use (&$output){
  if (   preg_match('| - \w+\s+\d+,\s+(\d+)$|', $entry, $tokens)
      && intval($tokens[1]) >= 2017 ) {
    $output[] = $entry;
  }
});
print_r($output);

这是一个更紧凑的变体:

<?php
$input = [
  'offer name - July 20, 2015',
  'offer name - July 20, 2016',
  'offer name - July 20, 2017'
];
$output = array_filter($input, function($entry){
  return
         preg_match('| - \w+\s+\d+,\s+(\d+)$|', $entry, $tokens)
      && (intval($tokens[1]) >= 2017);
});
print_r($output);

输出显然是:

Array
(
    [0] => offer name - July 20, 2017
)

答案 1 :(得分:2)

你可以使用类似的东西

function isYearAllowed($date, array $allowedYears)
{
    try {
        $date = new \DateTime($date);
    } catch (\Exception $e) {
        return false;
    }
    if(in_array($date->format("Y"), $allowedYears)){
        return true;
    }else{
        return false;
    }

}

使用示例

$allowedYears = ['2017','2016'];
if(isYearAllowed("2016-12-31", $allowedYears)){
    echo "offer";
}else{
    echo "don't offer";
}
exit;

现场演示(https://eval.in/835914

答案 2 :(得分:2)

您可以使用substrintval功能来实现相同目标。

以下是工作代码。您可以看到它正常工作here

<?php
$val = array("offer name - July 20, 2000", "offer name - July 20, 2017","offer name - July 20, 2018");
foreach($val as $a)
{
    $b = substr($a,strlen($a)-4, 4);
    if(intval($b)>= 2017)
    {
        echo "Offer";
    }
    else
    {
        echo "No Offer";
    }
    echo "\n";
}
?>

答案 3 :(得分:1)

您可以使用日期函数从日期字符串中提取年份,然后直接将其与2017进行比较,使其值等于或大于。

此功能提供基本功能,而如果年份大于或等于TRUE则返回2017,否则返回FALSE

function validate_year($in_string_date){

  // Particular to the case in this question, format date for date() function    
  $in_string_date = str_replace(',','',$in_string_date);    
  $in_string_date = str_replace(' ','-',$in_string_date);

  $valid_year = FALSE;

  // Get the year component from the date passed into the function.
  $year_in_date = date('Y',strtotime($in_string_date));

  /* Check if the year component extracted from the date passed
     to the function is greater or ewual to 2017 */
  if($year_in_date >= 2017){
    $valid_year = TRUE;
  }

  return $valid_year;
}

答案 4 :(得分:1)

可能有一种更简单的方法可以做到这一点,但在找到它之前,你可以尝试做一个while循环。

1)将变量设置为起始年份,您可以在php date("Y")中执行静态或年份时间功能。

2)

while('your variable'){ //will always be true
             if (preg_match('/'.'your variable'.'/')) //if there is an offer for this year
             {
                 echo 'offer';
                 'your variable'++;
             }
             else
             {
               break;
             }
        }

它可能不是你想要的,但它应该有用。