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

下面小編就為大家?guī)?lái)一篇js 判斷一組日期是否是連續(xù)的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。

問(wèn)題需求

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

我當(dāng)時(shí)第一反應(yīng) getDay() 后排序,然后前后對(duì)比即可。。

但是細(xì)想,完全不對(duì),比如本周一下周二,這樣也會(huì)誤判。

而且不僅僅這樣的問(wèn)題,還要跨月,跨年,閏月等問(wèn)題。

然后就有了下面的代碼。

讓時(shí)間戳抹平一切吧

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

然后我給了如下代碼:

let days = [

 '2016-02-28',

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

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

 '2016-03-02',

 '2016-03-03',

]

// 先排序,然后轉(zhuǎn)時(shí)間戳

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

 let dt = new Date(d)

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

 return +dt

})

// 比較時(shí)間戳是否一致

console.log(

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

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

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

 _days[0] == _days[4]

)

ok 一切問(wèn)題都解決掉了,跨年,跨月,閏月也都無(wú)所謂了。

通用函數(shù)封裝

上述代碼還是有點(diǎn)缺陷的,因?yàn)闀r(shí)分秒沒(méi)有處理,如果有時(shí)分秒,也要先抹去。

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) {

 // 先排序,然后轉(zhuǎn)時(shí)間戳

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

  let dt = new Date(d)

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

  // 抹去 時(shí) 分 秒 毫秒

  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

}

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

小結(jié)

js 處理時(shí)間還是非常簡(jiǎn)單的,比如寫(xiě)個(gè)日期插件,其實(shí)借助 Date 非常容易實(shí)現(xiàn),但實(shí)現(xiàn)你要了解 Date 的 api 才行。

當(dāng)然要說(shuō)簡(jiǎn)單,還是 php 最簡(jiǎn)單,那簡(jiǎn)直逆天。

以上這篇js 判斷一組日期是否是連續(xù)的簡(jiǎn)單實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:js 判斷一組日期是否是連續(xù)的簡(jiǎn)單實(shí)例
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門(mén)公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 加入群交流 | 手機(jī)站點(diǎn) | 投訴建議
工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65317125(9:00—18:00) 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
咨詢QQ:526150442(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報(bào)警專用圖標(biāo)