获取Timestamp数组的元素,其中Timestamp在特定月份中

时间:2015-04-04 10:41:59

标签: php arrays date datetime

我有一个时间戳数组(作为键)和字符串(作为值) 我想获得数组的所有元素,其中时间戳位于特定月份 例如:2015年4月:2015年4月1日0:00至2015年4月23日23:59。

最好的方法是什么?我应该先用ksort对数组进行排序,还是让它变慢?

编辑:我的阵列转储:

array(327) { [1428226200]=> string(95) "foo" [1428231600]=> string(95) "bar" ... } 

如果它更好,我也可以轻松获得这样的数组:

array(327) { ["2014/03/05 09:30"]=> string(95) "foo" ["2015/04/07 11:00"]=> string(95) "bar" ... }

1 个答案:

答案 0 :(得分:3)

将时间戳转换为日期并与格式化的月份进行比较:

$dates = /* your array */
$aprilDates = [];
foreach ($dates as $timestamp => $value) {
    $date = new \DateTime("@$timestamp");
    if ($date instanceof \DateTime && $date->format('m') == 4) {
        $aprilDates[$timestamp] = $value;
    }
}

Online Demo

您也可以使用\DateTime功能代替date

foreach ($dates as $timestamp => $value) {
    if (date('m', $timestamp) == 2) {
        $aprilDates[$timestamp] = $value;
    }
}

又一个选择:

$startDate = strtotime('first day of April');
$endDate = strtotime('last day of April 23:59:59');

foreach ($dates as $timestamp => $value) {
    if ($timestamp >= $startDate && $timestamp <= $endDate) {
        echo $value, PHP_EOL;
    }
}

关于你的问题

  

我应该先用ksort对数组进行排序,还是让它变慢?

首先对数组进行排序将对数组进行一次额外的迭代。这意味着是的,它会慢一些。只有几百个项目,但它可能没有明显的区别。