首页 > 解决方案 > 是否有可能在不循环的情况下获得一系列时间戳?

问题描述

我有一组时间戳,我想从中提取年份。我知道如何通过循环数组来做到这一点,但我想知道是否有一个函数可以返回一个带有年份的数组。我的数组示例

$dates = ['1498780800000', '1530316800000', '1561852800000', '1593475200000'];

预期产出

magic_function($dates); // ['2017', '2018', '2019', '2020'];

标签: phploopsdatetimestamp

解决方案


您的时间戳是从 Javascript 生成的毫秒时间戳。为了在 PHP 中使用,这些必须转换为秒,然后才能使用 date 函数确定年份。要创建没有 foreach 循环的年份数组,可以使用 array_map。

function getYearsFromMsTimestamps(array $msTimestamps){
  return array_map(function($val){return date('Y',$val/1000);},$msTimestamps);
}

$dates = ['1498780800000', '1530316800000', '1561852800000', '1593475200000'];

$arrYears = getYearsFromMsTimestamps($dates);

$expected = ['2017', '2018', '2019', '2020'];

var_dump($arrYears === $expected);  //bool(true)

更灵活的方法是使用格式作为函数的第二个可选参数。

function getYearsFromMsTimestamps(array $msTimestamps, $format = 'Y'){
  return array_map(
    function($val) use($format){
      return date($format,$val/1000);
    },
    $msTimestamps
  );
}

如果没有第二个参数,你会得到类似上面的结果。以 'Ymd' 作为第二个参数

$arrYears = getYearsFromMsTimestamps($dates,'Y-m-d');

然后是一个数组

array(4) {
  [0]=> string(10) "2017-06-30" 
  [1]=> string(10) "2018-06-30" 
  [2]=> string(10) "2019-06-30" 
  [3]=> string(10) "2020-06-30" 
}

推荐阅读