March 8, 2024 - @Cathy https://discord.com/channels/787287985821319186/923174465544785930/1215373775185387560

Hello ici ... J'ai une propriété Date qui sert de plage de date et j'aimerais ressortir combien il y a de dimanche (ou possible avec tout autre jour) dans la plage de dates ... Si c possible ? Svp


Réponse rapide

<aside> <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/9210293a-6b0f-4638-8e8d-3c40b40ed42b/b8366055-a446-4861-aa67-1e926814ca74/Invisible.png" alt="https://prod-files-secure.s3.us-west-2.amazonaws.com/9210293a-6b0f-4638-8e8d-3c40b40ed42b/b8366055-a446-4861-aa67-1e926814ca74/Invisible.png" width="40px" />

Untitled

lets(
	/* Dénombre le jour de la semaine cible dans une plage de date
	By Ouinx2 - 08/03/2024	*/
	
	/* Jour de la semaine, de 1 Ă  7 */
	jourCible , 7, 
	
	/* Rajouter .formatDate("YYYYMMDD").parseDate() si les dates contiennent des heures/minutes */
	startDate , prop("Date").dateStart(),
	endDate , prop("Date").dateEnd(),
	
	joursEntreDates , endDate.dateBetween(startDate , "days").add(1),
	semainesComplètes , joursEntreDates.divide(7).floor(),
	joursRestantsEnPlusDesSemainesComplètes , joursEntreDates.subtract(7.multiply(semainesComplètes)),
	
	semainesComplètes.add((joursRestantsEnPlusDesSemainesComplètes > (jourCible.subtract(startDate.day()).add(7).mod(7))).toNumber())
)

<aside> ℹ️ Explication rapide

La formule peut s’utiliser avec des dates comprenant ou non des heures/minutes. Il faut alors la réajuster (cf. commentaires dans la formule).

Le principe repose sur le dénombrement des jours séparant la date de départ de la date de fin, des semaines complètes et des jours séparant le jour cible du jour de départ.

jours séparant la date de départ de la date de fin : endDate.dateBetween(startDate , "days").add(1) semaines complètes : joursEntreDates.divide(7).floor() jours séparant le jour cible du jour de départ : jourCible.subtract(startDate.day()).add(7).mod(7))

Les “jours restants en plus des semaines complètes” joursEntreDates.subtract(7.multiply(semainesComplètes)) correspondent au nombre de jours supplémentaires qui ne permettent pas d’avoir une semaine complète. Ils vont donc de 0 à 6.

Comment dénombrer un jour de la semaine cible ?

**semainesComplètes**.add((**joursRestantsEnPlusDesSemainesComplètes** **>** (**jourCible.subtract(startDate.day()).add(7).mod(7))**).toNumber())

S'il y a une semaine complète, il y a forcément le jour cible dedans.


Autre écriture : semainesComplètes + (joursRestantsEnPlusDesSemainesComplètes > (jourCible - startDate.day() + 7) % 7).toNumber()

Version All-In-One sans variable : prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).divide(7).floor().add((prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).subtract(7.multiply(prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).divide(7).floor())) > (/*Nombre de 1 à 7 → */ 7.subtract(prop("Date").dateStart().day()).add(7).mod(7))).toNumber())

</aside>

</aside>

Réponses avancées :

Untitled

<aside> <img src="https://prod-files-secure.s3.us-west-2.amazonaws.com/9210293a-6b0f-4638-8e8d-3c40b40ed42b/b8366055-a446-4861-aa67-1e926814ca74/Invisible.png" alt="https://prod-files-secure.s3.us-west-2.amazonaws.com/9210293a-6b0f-4638-8e8d-3c40b40ed42b/b8366055-a446-4861-aa67-1e926814ca74/Invisible.png" width="40px" />

lets(
	/* Dénombre le jour de la semaine cible dans une plage de date
	By Ouinx2 - 08/03/2024	*/
	
	/* Jour de la semaine, de 1 Ă  7 */
	jourCible , 1, 
	
	/* Rajouter .formatDate("YYYYMMDD").parseDate() si les dates contiennent des heures/minutes */
	startDate , prop("Date").dateStart(),
	endDate , prop("Date").dateEnd(),
	
	joursEntreDates , endDate.dateBetween(startDate , "days").add(1),
	semainesComplètes , joursEntreDates.divide(7).floor(),
	joursRestantsEnPlusDesSemainesComplètes , joursEntreDates.subtract(7.multiply(semainesComplètes)),
	
	**["Lundi", "Mardi" , "Mercredi" , "Jeudi" , "Vendredi" , "Samedi" , "Dimanche"]**
		**.map(**
			<u>**current</u>.style("u") +**
			**"\t" +**
			semainesComplètes.add((joursRestantsEnPlusDesSemainesComplètes > ((<u>**index+1)**</u>.subtract(startDate.day()).add(7).mod(7))).toNumber()).style("b,blue")**).join("\t\t")**
)
[1,2,3,4,5].map(prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).divide(7).floor().add((prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).subtract(7.multiply(prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).divide(7).floor())) > (/*Nombre de 1 à 7 → */ current.subtract(prop("Date").dateStart().day()).add(7).mod(7))).toNumber())).sum()
let(cumul,[1,2,3,4,5].map(prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).divide(7).floor().add((prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).subtract(7.multiply(prop("Date").dateEnd().dateBetween(prop("Date").dateStart() , "days").add(1).divide(7).floor())) > (/*Nombre de 1 à 7 → */ current.subtract(prop("Date").dateStart().day()).add(7).mod(7))).toNumber())).sum(),
"Il y a " + cumul + " jour" + (cumul > 1 ? "s" : "") + " allant du lundi au vendredi.")

</aside>


By @Ouinx2 - **Buy me a Beer**