在php中获得给定日期的平均值

时间:2017-06-11 11:26:10

标签: php laravel date

我尝试得到平均给定日期,但是当日期来自两个不同年份时我失败了。我需要这样的东西

给定日期: 2017-06-1 2017-06-3 2017-06-4 2017-06-3 2017-06-5

输出:2017-06-4

这是我的代码:

$total = 0;
foreach ($dates as $date) {
    $total+= date('z', strtotime($date))+1;
}
$avg_day = $total/sizeof($dates);
$date = DateTime::createFromFormat('z Y', $avg_day . ' ' . date("Y"));

但我的代码不适用于

给定日期: 2016-12-29 2016-12-31 2017-01-1 2017-01-5 2017-01-3

3 个答案:

答案 0 :(得分:2)

您可以使用日期的时间戳,并使用avg()

Illuminate\Support\Collection method
$dates = [
    '2016-12-29', '2016-12-31', '2017-01-1', '2017-01-5', '2017-01-3'
];

$dateCollection = collect();

foreach($dates as $date){
    $dateCollection->push((new \DateTime($date))->getTimestamp());
}

$averageTimestamp = $dateCollection->avg(); //timestamp value
$averageDate = date('Y-m-d', $average);    

或使用Carbon包:

$dateCollection->push(Carbon::parse($date)->timestamp);
...
$averageDate = Carbon::createFromTimestamp($average)->toDateString();

答案 1 :(得分:1)

您的代码不适用于您的基准日期。

的正确输出
  

2017-06-1 2017-06-3 2017-06-4 2017-06-3 2017-06-5

  

2017年6月3日

根据OpenOffice计算和整体逻辑(日期由纪元数字表示)

查看此脚本

$dates = ['2017-06-1 ', '2017-06-3', '2017-06-4', '2017-06-3', '2017-06-5'];
$dates = array_map('strtotime', $dates);
$average = date('Y-m-d', array_sum($dates) / count($dates)); // 2017-06-03 (1496490480)

echo $average;

让简单的任务变得简单

答案 2 :(得分:0)

我认为平均年度有问题。所以,你可以这样做以获得平均值。

只是一个算法:

  1. 首先在package projekt; import java.util.Scanner; import java.util.Random; public class Projekt { public static void main(String[] args) { int[] tablica; Scanner odczyt = new Scanner(System.in); System.out.println("Give number of elements (max 100): "); int liczbaElementow = odczyt.nextInt(); tablica = new int[liczbaElementow]; if (liczbaElementow <= 100 && liczbaElementow > 0){ System.out.println("Generated:"); Random Generator = new Random(); for (int idx = 1; idx <= liczbaElementow; ++idx){ int randomInt = Generator.nextInt(101); System.out.print(" " +randomInt); } { System.out.println(" "); System.out.print("Choose sorting method (1, 2 lub 3):"); } Scanner odczyt2 = new Scanner(System.in); int ktoresort = odczyt2.nextInt(); switch (ktoresort) { case 1: System.out.println("SORT 1"); { { int min = 0; for(int i = 0;i<liczbaElementow;i++) { min = i; for(int j = i + 1;j<liczbaElementow;j++) { if(tablica[j] < tablica[min]) { min = j;} } int temp = tablica[i]; tablica[i] = tablica[min]; tablica[min] = temp; System.out.println(tablica[i]); } } } break; case 2: System.out.println("SORT 2"); break; case 3: System.out.println("SORT 3"); break; default: System.out.println("incorrect value"); break; } odczyt2.close(); } else if (liczbaElementow==0) { System.out.println("entered 0"); } else{ System.out.println("value is biger than 100"); } } }
  2. 中查找日期中的最小日期
  3. 发起变量$smallest
  4. 以最小的日期添加每个日期的差异。
  5. 从总数中找出平均数。
  6. 将此总数添加到最小日期。
  7. 在这里,你最小为$total = 0;

    $smallest = '2016-12-29'

    希望,这可能对你有帮助。