每周增加两次

时间:2016-02-12 08:01:15

标签: javascript php jquery

如何在特定日期和时间每周两次增加网页上的数字?

例如,网页会显示:

“2苹果”

然而每周二和周二星期四晚上9点,这个数字应该增加两个。

所以到星期五这个数字应该增加到6个“苹果”

在Javascript,php或Jquery中增加此功能的简单方法是什么?

2 个答案:

答案 0 :(得分:1)

正如评论中提到的那样,我建议你使用cron来处理这个问题。

首先,您必须将值存储在某处(文件,数据库,...)。然后,您应该创建一个cron作业,该作业运行的代码可以在一周的给定日期增加和更新您的值。

关于crons的一些帮助:https://en.wikipedia.org/wiki/Cron#Examples

我想添加关于cron和php的帖子:Executing a PHP script with a CRON Job

希望有所帮助

答案 1 :(得分:0)

这里是一个Javascript版本,你可以传递它应该开始计算的日期,你想要知道苹果数量的日期,一周中的苹果将被添加,更新的一天中的小时数将在每个日期添加的苹果的地方和数量。

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));

比我更复杂,并且我没有做太多测试,所以可能存在错误。

Here is a plunker使用这些值。