我尝试得到平均给定日期,但是当日期来自两个不同年份时我失败了。我需要这样的东西
给定日期:
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
答案 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)
我认为平均年度有问题。所以,你可以这样做以获得平均值。
只是一个算法:
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");
}
}
}
$smallest
在这里,你最小为$total = 0;
$smallest = '2016-12-29'
希望,这可能对你有帮助。