2016-02-12 1 views
0

Comment augmenter un nombre sur une page Web deux fois par semaine certains jours et heures?Augmenter le nombre deux fois par semaine

Par exemple, la page Web lirait:

« 2 pommes »

Cependant tous les mardis & jeudi à 21h00 le nombre devrait augmenter de deux.

Donc, le vendredi le nombre aurait augmenté à 6 « Pommes »

Qu'est-ce qu'un moyen simple d'incrémenter ce en Javascript, php ou Jquery?

+0

Vous aurez peut-être besoin d'une base de données ou d'une manipulation de fichier avec celle-ci – Ceeee

+1

Enregistrez votre numéro n'importe où (base de données, fichier texte ..). Faites un travail cron et exécutez un script qui lit, augmente et enregistre le nombre. – kosmos

+0

Comme l'a souligné Kosmos, cela peut être fait de plusieurs façons. Tant que vous le stockez de manière centralisée, tous les visiteurs voient le même nombre de pommes. Donc, Javascript et jQuery seraient moins évidents, je ne voudrais pas le faire dans JS ou jQuery. – Werner

Répondre

0

Voici une version Javascript, vous pouvez passer la date devrait commencer compter, la date à laquelle vous voulez connaître le nombre de pommes, les jours de la semaine seront ajoutés, les heures de la mise à jour auront lieu et le nombre de pommes qui seront ajoutées à chacune de ces dates.

Date.prototype.addDays = function (days) { 
    var result = new Date(this); 
    result.setDate(result.getDate() + days); 
    return result; 
} 
Date.prototype.addHours = function (hours) { 
    var result = new Date(this); 
    result.setHours(result.getHours() + hours); 
    return result; 
} 

function getApples(startdate, date, updateDays, updateTime, applesPerUpdate) { 
    var startDay = startdate.getDay(); 
    var firstUpdateDate; 
    for(day of updateDays) { 
     if (day >= startDay) {//assumes startdate has no time added 
      firstUpdateDate = startdate.addDays(day - startDay).addHours(updateTime); 
      break; 
     } 
    } 
    if (!firstUpdateDate) 
     firstUpdateDate = startdate.addDays(7 - (startDay - updateDays[0])).addHours(updateTime); 

    var updateDaysReverse = updateDays.slice(0).reverse();//clones the array 

    var dateDay = date.getDay(); 
    var lastUpdateDate; 
    for(day of updateDaysReverse) { 
     if (day < dateDay || day == dateDay && date.getHours() > updateTime) { 
      lastUpdateDate = date.addDays(day - dateDay); 
      break; 
     } 
    } 
    if (!lastUpdateDate) 
     lastUpdateDate = date.addDays(updateDaysReverse[0] - (7 + dateDay)); 
    lastUpdateDate = new Date(Date.UTC(1900 + lastUpdateDate.getYear(), lastUpdateDate.getMonth(), lastUpdateDate.getDate(), updateTime, 0, 0, 0)); 

    var secs = Math.trunc((lastUpdateDate - firstUpdateDate)); 
    if (secs < 0) return 0; 

    var dayDiffs = []; 
    for(day of updateDays) 
     dayDiffs.push(day - updateDays[0]); 

    var weeks = Math.trunc(secs/604800000); 
    var days = Math.trunc((secs % 604800000)/86400000); 
    var apples = weeks * updateDays.length; 

    for(diff of dayDiffs) 
    { 
     if (diff <= days) 
      apples++; 
     else 
      break; 
    } 
    return apples * applesPerUpdate; 
} 
// important, day and month is zero-based 
var startDate = new Date(Date.UTC(2016, 01, 07, 0, 0, 0, 0)); 
var updateDays = [2, 4];// 0 = sunday , have to be in order and must be 0 <= x < 7 
var updateTime = 9; 

console.log(getApples(startDate, new Date(), updateDays, updateTime, 2)); 

était plus coplicated que je ne thaught, et je havn't Testet beaucoup, donc il peut y avoir des bugs.

Here is a plunker pour jouer avec les valeurs.

+0

wow, et me voilà pensant que ce n'était même pas possible. Tu es une légende, monsieur. – Farang

+0

@Farang il faut beaucoup de calcul de date qui est ennuyeux mais faisable. Ce que vous ne pouvez pas faire avec cette méthode, c'est de changer les paramètres et de conserver l'ancien résultat. Vous pouvez calculer l'ancienne valeur jusqu'à la date que vous souhaitez modifier, puis ajouter le montant de cette période à ce jour avec les nouveaux paramètres, mais cela devient fastidieux. – AntiHeadshot

+0

Est-ce vraiment propre? Je veux dire, pourquoi feriez-vous une tâche reproductible ne pas utiliser crons? Cela fonctionne, mais vous devez également enregistrer votre date de début. Je me sens comme c'est beaucoup plus compliqué de cette façon. Vous pouvez le faire en deux lignes avec un script de serveur – r4phG

1

Comme il a été mentionné dans les commentaires, je vous conseille d'utiliser un cron pour gérer cela. D'abord, vous devez stocker votre valeur quelque part (fichier, base de données, ...). Ensuite, vous devez créer un travail cron, qui exécute un code qui augmente et met à jour votre valeur aux jours donnés de la semaine.

aide sur crons: https://en.wikipedia.org/wiki/Cron#Examples

Je voudrais ajouter ce post sur Cron et php: Executing a PHP script with a CRON Job

Hope it helps

+0

Merci beaucoup pour l'information – Farang