Ceci est une question posée par un ami dans le groupe. À ce moment-là, j'ai dit que je pouvais simplement juger si la journée était adjacente. Plus tard, j'y ai pensé attentivement et j'ai trouvé que c'était complètement faux.
Exigences problématiques
Étant donné 5 dates du même format, comment déterminez-vous s'il s'agit de 5 jours consécutifs?
Ma première réaction a été de Getday () et de le trier, puis de le comparer avant et après. .
Mais si vous y réfléchissez avec soin, c'est complètement faux. Par exemple, ce sera également une erreur de jugement.
Et ce n'est pas seulement un tel problème, mais aussi pour traverser le mois, le réveillon du Nouvel An, le mois de lampe et d'autres problèmes.
Ensuite, il y a le code suivant.
Laissez l'horodatage lisser tout
Afin de ne pas m'inquiéter de ces problèmes, j'ai pensé aux horodatages, et ce type peut ignorer complètement les problèmes ci-dessus. Traitez simplement l'horodatage et comparez-les à la fin.
Ensuite, j'ai donné le code suivant:
Soit Days = ['2016-02-28', '2016-02-29', // Leap Month'2016-03-01 ', // Cross Month'2016-03-02', '2016-03-03',] // Tri First First, puis de tourner le TimeStamp Let _days = Days.Sort (). Map ((d, i) => {Let dt = new Date (d). dt.setDate (dt.getDate () + 4 - i) // traité comme la même date de retour + dt}) // compare si les horodatages sont les mêmes console.log (_days [0] == _days [1] && _days [0] == _days [2] && _days [0] == _days [4])OK, tous les problèmes ont été résolus, et peu importe que vous franchissez la nouvelle année, traversez le mois ou le mois de saut.
Encapsulation de fonction générale
Le code ci-dessus est encore un peu imparfait, car le temps, la minute et la seconde ne sont pas traités, et s'il y a des heures, minute et deuxième, vous devez également l'effacer en premier.
Laissez les jours = ['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 (continues (jours)) Fonction suite (arr_days) {// Triez d'abord, puis tournez l'horodatage LET DAWNS = Arr_Days.Sort (). Map ((d, i) => {let dt = new Date (d) dt.setDate (dt.getDate () + 4 - i) // traité en tant que date de même // milliseconds, 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}Cette fonction est juste modifiée à 2 endroits, effacement, temps, minute, deuxième, milliseconde et comparaison de boucle, et les autres sont les mêmes.
résumé
Le temps de traitement de JS est encore très simple. Par exemple, la rédaction d'un plug-in de date est en fait très facile à implémenter avec l'aide de la date, mais vous devez comprendre l'API de date.
Bien sûr, dire que c'est simple, ou que PHP est le plus simple, c'est tout simplement incroyable.
L'exemple simple ci-dessus de juger si un ensemble de dates est continu est tout le contenu que je partage avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.