これは、グループの友人から尋ねられた質問です。その時、私はその日が隣接しているかどうかを判断できると言った。後で、私はそれについて慎重に考え、それが完全に間違っていることを発見しました。
問題の要件
同じ形式の5つの日付を考えると、5日間連続しているかどうかをどのように判断しますか?
私の最初の反応は、getDay()を並べ替えて、それを前後に比較することでした。 。
しかし、慎重に考えると、それは完全に間違っています。たとえば、これも誤判断します。
そして、それはそのような問題だけでなく、月、大ve日、跳躍月、その他の問題を越えます。
次に、次のコードがあります。
タイムスタンプがすべてを滑らかにします
これらの問題を心配しないために、私はタイムスタンプを考えました、そして、この男は上記の問題を完全に無視することができます。タイムスタンプを処理して、最後に比較してください。
次に、次のコードを提供しました。
days = ['2016-02-28'、 '2016-02-29'、// leap month'2016-03-01 '、// Cross Month'2016-03-02'、 '2016-03-03'、] //最初に並べ替えて、Timestamp let _days = days(d)= dt = dt => dt => day(d) dt.setdate(dt.getdate() + 4 -i)//同じ日付のreturn + dt}として処理された//タイムスタンプが同じconsole.log.logであるかどうかを比較します(_days [0] == _days [1] && _days [0] == _days [2] _days [4])
すべての問題が解決されましたが、新年を越えたり、月を越えたり、月を迎えたりするかどうかは関係ありません。
一般的な関数のカプセル化
上記のコードにはまだ少し欠陥があります。時間、秒、2番目は処理されていないため、時間と2番目の場合は、最初に消去する必要があります。
days = ['2016-02-28 12:00:00'、 '2016-02-29 12:00:01'、// leap Month'2016-03-01 12:00:02 '、// Cross-Month'2016-03-02 12:00:03'、 '2016-03-03 12:00:04'、 '2016-03-04 12:00:04 '、] console.log(continays(days))function continoway(arr_days){//最初に並べ替え、次にタイムスタンプLet days = arr_days.sort()。 Milliseconds、dt.setminutes(0)dt.setseconds(0)dt.setmilliseconds(0)return +dt})let ret = true days.foreach(d => {if(days [0]!== d){ret = fals}})return ret}この関数は2つの場所で変更され、時間、分、秒、ミリ秒、ループの比較を消去し、その他は同じです。
まとめ
JSの処理時間はまだ非常に簡単です。たとえば、日付のプラグインを書くことは、実際には日付の助けを借りて非常に簡単に実装できますが、日付APIを理解する必要があります。
もちろん、それが単純であると言うこと、またはPHPが最も簡単であると言うことは、それが単に驚くべきことです。
日付のセットが継続的であるかどうかを判断する上記の簡単な例は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。