js 判斷一組日期是否是連續(xù)的簡單實例
來源:易賢網 閱讀:1680 次 日期:2016-07-28 16:25:13
溫馨提示:易賢網小編為您整理了“js 判斷一組日期是否是連續(xù)的簡單實例”,方便廣大網友查閱!

下面小編就為大家?guī)硪黄猨s 判斷一組日期是否是連續(xù)的簡單實例。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。

問題需求

給定5個相同格式的日期,怎么判斷是否是連續(xù)5天呢?

我當時第一反應 getDay() 后排序,然后前后對比即可。。

但是細想,完全不對,比如本周一下周二,這樣也會誤判。

而且不僅僅這樣的問題,還要跨月,跨年,閏月等問題。

然后就有了下面的代碼。

讓時間戳抹平一切吧

為了不糾結這些問題,我想到了時間戳,這貨就可以完全忽略上述問題了,只要處理時間戳,最后比較即可。

然后我給了如下代碼:

let days = [

 '2016-02-28',

 '2016-02-29', // 閏月

 '2016-03-01', // 跨月

 '2016-03-02',

 '2016-03-03',

]

// 先排序,然后轉時間戳

let _days = days.sort().map((d, i) => {

 let dt = new Date(d)

 dt.setDate(dt.getDate() + 4 - i) // 處理為相同日期

 return +dt

})

// 比較時間戳是否一致

console.log(

 _days[0] == _days[1] &&

 _days[0] == _days[2] &&

 _days[0] == _days[3] &&

 _days[0] == _days[4]

)

ok 一切問題都解決掉了,跨年,跨月,閏月也都無所謂了。

通用函數封裝

上述代碼還是有點缺陷的,因為時分秒沒有處理,如果有時分秒,也要先抹去。

let days = [

 '2016-02-28 12:00:00',

 '2016-02-29 12:00:01', // 閏月

 '2016-03-01 12:00:02', // 跨月

 '2016-03-02 12:00:03',

 '2016-03-03 12:00:04',

 '2016-03-04 12:00:04',

]

console.log(continueDays(days))

function continueDays(arr_days) {

 // 先排序,然后轉時間戳

 let days = arr_days.sort().map((d, i) => {

  let dt = new Date(d)

  dt.setDate(dt.getDate() + 4 - i) // 處理為相同日期

  // 抹去 時 分 秒 毫秒

  dt.setHours(0)

  dt.setMinutes(0)

  dt.setSeconds(0)

  dt.setMilliseconds(0)

  return +dt

 })

 let ret = true

 days.forEach(d => {

  if (days[0] !== d) {

   ret = false

  }

 })

 return ret

}

這個函數只是改動了2個地方,抹去 時 分 秒 毫秒 和 循環(huán)比較,其他都一樣。

小結

js 處理時間還是非常簡單的,比如寫個日期插件,其實借助 Date 非常容易實現,但實現你要了解 Date 的 api 才行。

當然要說簡單,還是 php 最簡單,那簡直逆天。

以上這篇js 判斷一組日期是否是連續(xù)的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考

更多信息請查看網絡編程

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網