1

我需要一些 Javascript strtotime 类型代码的帮助,拜托。

我们公司只为其会员提供为期 2 天的每周促销活动。因此,当会员登录时,他们会看到宣传促销的横幅。如果他们碰巧在促销日期之外登录,则横幅将链接到信息页面。否则,它会直接链接到促销活动。

目前我们每周都会手动更新,这很痛苦。我们希望能够使用 Javascript* 为我们自动更改链接。好的,没问题,对吧?

好吧,问题是,我们不想做的是每周用特定的日期/时间进入并编辑脚本——否则,有什么意义呢?目前,促销活动于周三上午 9 点进行。到星期四上午 9 点 它会不时更改,每隔几个月左右(周一至周二,上午 9 点至晚上 9 点之类的),因此我们将不得不不时编辑脚本,但如果我们可以避免每周进行一次,那会很棒的。

所以这就是我想出的。它被大量评论,因此我的技术不那么技术的同事可以毫不费力地进行编辑。

var getData = function(){

    var d = new Date();
    var today = d.getDay(); // current day, numerically
    var hr = d.getHours(); // current hour

    // For Days:
    // 0 = Sunday
    // 1 = Monday
    // 2 = Tuesday
    // 3 = Wednesday
    // 4 = Thursday
    // 5 = Friday
    // 6 = Saturday

    var startDay = 3;
    var endDay = 4;

    // For Hours:
    // This is a 24-hour clock. Midnight (12:00 AM) is 0, Noon = 12, 9 PM = 21, etc.
    // So for a start time of 9 AM, put 9, and for an end time of 9 PM, put 21.

    var startTime = 12;
    var endTime = 15;

    // Set the "url" variable to the NON-sale landing page. Put the SALE page URL in
    // the "url" variables within the nested "if" statements below:

    var url = 'http://link-to-the-non-promo-info-page';

    if (( today >= startDay ) && ( hr >= startTime )) {
        if ( today <= endDay ) && ( hr <= endTime )) {
            url = 'http://link-to-the-live-promotion';
        }
    }

    // ... non-essential variables and the actual display code 
    // below this line...
    // ...
}

请注意,我设置了变量,以便促销在下午 12 点到下午 3 点运行。如果这是真的,理想的结果是促销链接显示为周三中午 12 点到周四下午 3 点。显然,这段代码会发生什么,促销横幅在周三 12-3 和周四 12-3 直播。

我玩弄了各种逻辑排列,但无法找到正确的排列。最终,我希望能够打开脚本(或让我的一位同事打开它),并能够设置开始日期/时间和结束日期/时间,而无需设置特定日期( 7 月 24 日星期三到 7 月 25 日星期四),它就可以工作。

如果这是 PHP,我会把它包起来。但它是 Javascript,所以我在完成这项工作时能得到的任何帮助都会很棒。

谢谢,鲍勃

更新:@Kamala,我通过添加分钟和其他一些调整来稍微调整时间,但存在不接受结束时间的问题。请注意,脚本设置为今天开始和结束日期,现在开始/结束时间已经过去(对于 EST 区域,无论如何),但促销链接仍在显示:

    var d = new Date();
var today = d.getDay(); // current day, numerically
var hr = d.getHours(); // current hour
var mn = d.getMinutes();
if (mn < 10) {
    mn = "0"+mn;
}
var time = hr+":"+mn;

// For Days:
// 0 = Sunday
// 1 = Monday
// 2 = Tuesday
// 3 = Wednesday
// 4 = Thursday
// 5 = Friday
// 6 = Saturday

var startDay = 5;
var endDay = 5;

// For Hours:
// This is a 24-hour clock. Midnight (12:00 AM) is 0, Noon = 12, 9 PM = 21, etc.
// So for a start time of 9 AM, put 9, and for an end time of 9 PM, put 21.

var startTime = "11:00";
var endTime = "12:00";

// Set the "url" variable to the NON-sale landing page. Put the SALE page URL in
// the "url" variables within the nested "if" statements below:

var url1 = 'http://info-landing-page';


if (( today >= startDay ) && ( today <= endDay ) ) { // Awesome, we're within the promo days
    if ( ( today != startDay && today != endDay ) // The promo is in full-swing - doesn't matter what time it is
        || ( today == startDay && time >= startTime )
        || ( today == endDay && time <= endTime ) ) {

        url1 = 'http://promo-url';
        alert("promo url set");
    }
 } else {
     alert("we're pointing to the LP");
 }

需要额外的逻辑吗?也许是另一个嵌套的“如果”?我迷路了。

谢谢,鲍勃

4

2 回答 2

1

尝试这个...

if (( today >= startDay ) && ( today <= endDay ) ) { // Awesome, we're within the promo days
    if( ( today != startDay && today != endDay )  // The promo is in full-swing - doesn't matter what time it is
        ||( today == startDay && hr >= startTime ) 
        || (today == endDay && hr <= endTime ) )
        url = 'http://link-to-the-live-promotion';
    }
}
于 2013-07-25T18:39:56.683 回答
0

所以,你需要的是两次检查。如果促销是在第 1 天,是在一定时间之后吗?或者如果是在第 2 天,是在某个时间之前吗?

if ( today === startDay  &&  hr >== startTime ) {
    url = 'http://link-to-the-live-promotion';
} else if ( today === endDay  &&  hr <== endTime ) {
    url = 'http://link-to-the-live-promotion';
}

对于您的问题,两天之间没有几天..无需检查是否day > startDay && day < endDay.

编辑:好吧,如果您的促销活动持续 3 天,您可能需要这种能力。这是处理此问题的另一种尝试(重写为使用 OR 而不是 if-else-if:

if ((today > startDay  &&  today < endDay) ||
   (today == startDay  &&  hr >= startTime) ||
   (today == endDay  &&  hr <= endTime)) {
    url = 'http://link-to-the-live-promotion';
}
于 2013-07-25T18:47:12.163 回答