Esta es una pregunta formulada por un amigo en el grupo. En ese momento, dije que podía juzgar si el día era adyacente. Más tarde, lo pensé con cuidado y descubrí que estaba completamente equivocado.
Requisitos de problemas
Dadas 5 fechas del mismo formato, ¿cómo determina si son 5 días consecutivos?
Mi primera reacción fue Getday () y ordenarlo, y luego compararlo antes y después. .
Pero si lo piensas cuidadosamente, está completamente mal. Por ejemplo, esto también será un juicio erróneo.
Y no es solo un problema, sino también cruzar el mes, la víspera de Año Nuevo, el mes salto y otros problemas.
Luego está el siguiente código.
Deja que la marca de tiempo suave todo
Para no preocuparme por estos problemas, pensé en las marcas de tiempo, y este tipo puede ignorar por completo los problemas anteriores. Simplemente procese la marca de tiempo y compárelo al final.
Luego di el siguiente código:
Sea Days = ['2016-02-28', '2016-02-29', // Leap Month'2016-03-01 ', // Cross mes'2016-03-02', '2016-03-03',] // clasificar primero, luego gire la marca de tiempo _days = días.sort (). dt.SetDate (dt.getDate () + 4 - i) // procesado como la misma fecha return + dt}) // Compare si las marcas de tiempo son las mismas consolas.log (_days [0] == _days [1] && _days [0] == _days [2] && _days [0] == _days [3] _days [4])
Ok, todos los problemas se han resuelto, y no importa si cruza el año nuevo, cruza el mes o el mes salto.
Encapsulación de la función general
El código anterior sigue siendo un poco defectuoso, porque el tiempo, el minuto y el segundo no se procesan, y si hay tiempos, minuto y segundo, también debe borrarlo primero.
Sea Days = ['2016-02-28 12:00:00', '2016-02-29 12:00:01', // Leap Mese'2016-03-01 12:00:02 ', // Cross-Month'2016-03-02 12:00:03', '2016-03-03 12:00:04', '2016-03-04-04 12:00:04 ',] console.log (continúa (días)) función continúa (arr_days) {// ordenar primero, luego gire la marca de tiempo de marcar days = arr_days.sort (). Map ((d, i) => {Let dt = nueva fecha (d) dt.setDate (dt.getDate () + 4 - i) // procesado como la misma fecha // MilliseConds, dt.setminutes (0) dt.setSeconds (0) dt.setMilliseConds (0) return +dt}) deje ret = verdaderos días.ForEach (d => {if (días [0]! == d) {ret = falso}}) return retr}Esta función acaba de cambiar en 2 lugares, borrando el tiempo, el minuto, el segundo, la comparación de milisegundos y bucle, y los otros son los mismos.
resumen
El tiempo de procesamiento de JS sigue siendo muy simple. Por ejemplo, escribir un complemento de fecha es realmente muy fácil de implementar con la ayuda de la fecha, pero debe comprender la API de fecha.
Por supuesto, decir que es simple, o PHP es el más simple, que es simplemente increíble.
El simple ejemplo simple de juzgar si un conjunto de fechas es continuo es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.