J'essaie de basculer le texte entre la semaine 1 et la semaine 2 chaque semaine en fonction d'un tableau de dates.

Actuellement, cela fonctionne, mais uniquement pour des dates spécifiées, j'essaie de lui faire garder le texte pendant toute la semaine jusqu'à ce qu'il atteigne la date suivante.

Donc, si la date est le lundi 16 avril, je veux qu'elle affiche la semaine 1 pour toute la semaine jusqu'à ce qu'elle atteigne le lundi 23 avril.

Sinon, serait-il possible de changer de texte tous les dimanches et de conserver le même texte jusqu'au dimanche suivant?

Code

var todaysdate = new Date();
var dd = todaysdate.getDate();
var mm = todaysdate.getMonth()+1; //January is 0!

var yyyy = todaysdate.getFullYear();
if(dd<10){
    dd='0'+dd;
} 
if(mm<10){
    mm='0'+mm;
} 
var todaysdate = dd+'/'+mm+'/'+yyyy;

var weekadates = 
["17/04/2018", "30/04/2018",//April
"14/05/2018",               //May
"04/06/2018", "18/06/2018",//June
"02/07/2018", "16/07/2018",//July
];

var weekbdates = 
["23/04/2018",             //April
"07/05/2018", "21/05/2018",//May
"11/06/2018", "25/06/2018",//June
"09/07/2018"               //July
];





var a = weekadates.indexOf(todaysdate);
var b = weekbdates.indexOf(todaysdate);


if (a > -1) 
{
    document.getElementById("changeText").innerHTML = "Week 1";
} 
else if (b > -1) 
{
    document.getElementById("changeText").innerHTML = "Week 2"; 
} else
{
    document.getElementById("changeText").innerHTML = "Holidays!";
}

https://jsfiddle.net/naLuny2x/2/

Merci pour votre aide, très appréciée.

1
jdoe2168 17 avril 2018 à 12:06

3 réponses

Meilleure réponse

Utilisez le nombre de millisecondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC.

{
    function oddEvenWeek ( baseDate = "04/17/2018", current = Date.now() ) {
        let base = new Date( baseDate ).getTime();
        let now = new Date( current ).getTime();
        let fromBase = ( now - base ) / ( 1000 * 60 * 60 * 24 * 7 ); //Weeks from base date
        let weeks = fromBase % 2;
        if ( weeks % 1 >= 6 / 7 ) {
            console.log( "Holiday" );
        } else {
            if ( ( fromBase % 2 ) < 1 ) {
                console.log( "Week 1" );
            } else {
                console.log( "Week 2" );
            }
        }
    }

    oddEvenWeek("04/17/2018","04/17/2018");
    oddEvenWeek("04/17/2018","04/23/2018");
    oddEvenWeek("04/17/2018","04/24/2018");
    oddEvenWeek("04/17/2018","04/30/2018");
}
0
Isitea 17 avril 2018 à 09:36

Lorsque vous essayez de trouver la date dans le tableau, vous ne devez pas utiliser la date du jour, mais plutôt la date du lundi de la semaine en cours:

const monday = new Date();
monday.setDate(monday.getDate() - ((monday.getDay() + 6) % 7));

Et puis utilisez-le dans le reste de votre logique.

0
Robby Cornelissen 17 avril 2018 à 09:19

J'ai trouvé un extrait de code pour découvrir la semaine civile ici:

/**
 * Returns the week number for this date.  dowOffset is the day of week the week
 * "starts" on for your locale - it can be from 0 to 6. If dowOffset is 1 (Monday),
 * the week returned is the ISO 8601 week number.
 * @param int dowOffset
 * @return int
 */
Date.prototype.getWeek = function (dowOffset) {
/*getWeek() was developed by Nick Baicoianu at MeanFreePath: http://www.meanfreepath.com */

    dowOffset = typeof(dowOffset) == 'int' ? dowOffset : 0; //default dowOffset to zero
    var newYear = new Date(this.getFullYear(),0,1);
    var day = newYear.getDay() - dowOffset; //the day of week the year begins on
    day = (day >= 0 ? day : day + 7);
    var daynum = Math.floor((this.getTime() - newYear.getTime() - 
    (this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000) + 1;
    var weeknum;
    //if the year starts before the middle of a week
    if(day < 4) {
        weeknum = Math.floor((daynum+day-1)/7) + 1;
        if(weeknum > 52) {
            nYear = new Date(this.getFullYear() + 1,0,1);
            nday = nYear.getDay() - dowOffset;
            nday = nday >= 0 ? nday : nday + 7;
            /*if the next year starts before the middle of
              the week, it is week #1 of that year*/
            weeknum = nday < 4 ? 1 : 53;
        }
    }
    else {
        weeknum = Math.floor((daynum+day-1)/7);
    }
    return weeknum;
};

Ensuite, vous pouvez calculer avec l'opérateur modulo (% ) s'il s'agit d'une semaine régulière ou inégale:

var todaysdate = new Date();
var dd = todaysdate.getDate();
if(dd === 1) {
    document.getElementById("changeText").innerHTML = "Week " + (todaysdate.getWeek() % 2 + 1);
} else {
    document.getElementById("changeText").innerHTML = "Holidays!"
}
0
Kokogino 17 avril 2018 à 09:31