国产探花免费观看_亚洲丰满少妇自慰呻吟_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 判斷一組日期是否是連續的簡單實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卓资县| 黄大仙区| 滦平县| 全南县| 龙海市| 镇宁| 长武县| 彩票| 阿拉尔市| 乌苏市| 岳阳市| 虹口区| 汕尾市| 曲周县| 云和县| 商水县| 旺苍县| 天门市| 日喀则市| 行唐县| 盘锦市| 新巴尔虎左旗| 门头沟区| 大同市| 黑龙江省| 乌兰察布市| 三都| 丹寨县| 漳州市| 措美县| 玉溪市| 东海县| 双流县| 锦州市| 皮山县| 固阳县| 绥棱县| 墨竹工卡县| 武鸣县| 宝山区| 清远市|