国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

js 判斷一組日期是否是連續的簡單實例

2019-11-20 09:30:58
字體:
來源:轉載
供稿:網友

這是群里一朋友問的問題,當時我說判斷下 day 是否相鄰即可,后來細想,發現完全不對。

問題需求

給定5個相同格式的日期,怎么判斷是否是連續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個地方,抹去 時 分 秒 毫秒 和 循環比較,其他都一樣。

小結

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

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

以上這篇js 判斷一組日期是否是連續的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 美姑县| 安远县| 曲松县| 西和县| 康乐县| 睢宁县| 曲麻莱县| 应用必备| 博客| 芮城县| 白朗县| 淮北市| 岳池县| 讷河市| 蒲江县| 清苑县| 保康县| 武山县| 紫金县| 会泽县| 洪洞县| 来安县| 铅山县| 青岛市| 泰来县| 湘西| 晋州市| 商南县| 枣庄市| 鸡泽县| 涞源县| 化州市| 忻城县| 连平县| 宁晋县| 武汉市| 同仁县| 恭城| 河东区| 左云县| 阿拉善右旗|