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.
Vous aurez peut-être besoin d'une base de données ou d'une manipulation de fichier avec celle-ci – Ceeee
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
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