php
$date = [
'2019-12-31 12:22:33',
'2019-11-10 12:22:22',
'2018-12-01 12:22:33',
'2019-05-11 11:11:11'
];
$now = time();
function getNearDate($date, $com){
$cnt = count($date);
if ($cnt === 0) return false;
for($i=0 ; $i < $cnt; $i++){
if(isset($date[$i+1])) {
$front = abs($com - strtotime($date[$i]));
$behind = abs($com - strtotime($date[$i+1]));
if($front < $behind) {
list($date[$i], $date[$i+1]) = [$date[$i+1], $date[$i]];
}
}
}
return end($date);
}
var_dump(getNearDate($date, $now));
golang
package main
import (
"fmt"
"time"
"errors"
)
func main() {
arr := [] string {
"2019-12-31 12:22:33",
"2019-11-10 12:22:22",
"2018-12-01 12:22:33",
"2019-05-11 11:11:11"}
now := time.Now().Unix()
res, err := getNearDate(arr, now)
if err != nil {
panic(err)
}
fmt.Println(res)
}
func getNearDate(date_arr []string, timestamp int64) (string,error) {
cnt := len(date_arr)
if cnt == 0 {
return "输入非法",errors.New("输入非法")
}
for i:=0; i<cnt;i++ {
if i < cnt-1 {
before := Int64abs(timestamp - strtotime(date_arr[i]))
behind := Int64abs(timestamp - strtotime(date_arr[i+1]))
if before < behind {
temp := date_arr[i]
date_arr[i] = date_arr[i+1]
date_arr[i+1] = temp
}
}
}
return date_arr[cnt-1],nil
}
func strtotime(date string) int64 {
timeLayout := "2006-01-02 15:04:05"
loc, _ := time.LoadLocation("Local")
theTime, _ := time.ParseInLocation(timeLayout, date, loc)
sr := theTime.Unix()
return sr
}
func Int64abs (num int64) int64 {
if num < 0 {
return -num
}
return num
}