【问题标题】:Help with recurring javascript countdown and timezones帮助重复出现 javascript 倒计时和时区
【发布时间】:2011-01-27 17:22:36
【问题描述】:

目标: 为我们的下一个可用直播创建倒计时。

详情: 我们每周直播六次(太平洋标准时间)。
1. 周日上午 8:00
2. 周日上午 10:00
3. 周日中午 12:00
4. 周日下午 6:30
5. 星期三晚上 7:00
6. 周六上午 10:00

我的方法: 最初我检查它是哪一天以及它是什么时间,然后创建下一个流的倒计时。这适用于我们的时区 (PST) 和任何相对接近的时区。

问题: 首先检查这一天打破了我对那些让他们比我们早一天的时区的人的方法。例如,如果来自伦敦的某人在星期四凌晨 2:30(格林威治标准时间)检查该站点,我的代码将开始倒计时到星期六上午 10:00 流,而不是星期三晚上 7:00。 (PST) 将在 30 分钟后开始。

我确信我所做的可以清理和改进,告诉我如何。

我的代码:

// Countdown
function countDown( addDay, hour, min ) {
    var newCount = new Date(); 
    newCount = new Date(newCount.getFullYear(), newCount.getMonth(), newCount.getDate() + addDay, hour, min); 
    $('#service_countdown').countdown({until: $.countdown.UTCDate(-8, newCount)}); 
}

var day_ref, day, addDay, hour, min;
addDay = 0;
hour = 0;
min = 0;
day = {};

day_ref = new Date();
day = {"day" : day_ref.getDay(), "hour" : day_ref.getHours(), "min" : day_ref.getMinutes()};

// It's Sunday
if ( day.day === 0 ) {

    if ( day.hour < 8 ) {
          hour = 8;
        countDown(addDay, hour, min);
    } 
    else if ( day.hour < 10 ) {
          hour = 10;
        countDown(addDay, hour, min);
    } 
    else if ( day.hour < 12 ) {
          hour = 12;
        countDown(addDay, hour, min);
    }
    else if ( day.hour <= 18 && day.min < 30 ) {
          hour = 18;
           min = 30;
        countDown(addDay, hour, min);
    } 
    else {
        addDay = 3;
          hour = 19;
        countDown(addDay, hour, min);
    }
} 
// It's Monday
else if ( day.day === 1 ) {
    addDay = 2;
      hour = 19;
    countDown(addDay, hour, min);
} 
// It's Tuesday
else if ( day.day === 2 ) {
    addDay = 1;
      hour = 19;
    countDown(addDay, hour, min);
} 
// It's Wednesday
else if ( day.day === 3) {

    if ( day.hour < 19 ) {
          hour = 19;
        countDown(addDay, hour, min);
    } else {
        addDay = 3;
          hour = 10;
        countDown(addDay, hour, min);
    }
} 
// It's Thursday
else if ( day.day === 4 ) {
    addDay = 2;
      hour = 10;
    countDown(addDay, hour, min);
} 
// It's Friday
else if ( day.day === 5 ) {
    addDay = 1;
      hour = 10;
    countDown(addDay, hour, min);
} 
// All that's left is Saturday
else {

    if ( day.hour < 10 ) {
          hour = 10;
        countDown(addDay, hour, min);
    } else {
        addDay = 1;
          hour = 8;
        countDown(addDay, hour, min);
    }
}

提前感谢您的帮助!

【问题讨论】:

  • 这可能更适合codereview.stackexchange.com - 尽管这里也绝对是主题!
  • 太好了,我什至不知道 codereview.stackexchange.com 的存在。解决时区问题后,我会将其移到那里。谢谢。

标签: javascript refactoring timezone countdown


【解决方案1】:

我最终只是一直在计算server side。在bob-the-destroyer 的帮助下,考虑到要求,工作 php 非常紧凑。

<?php

$schedule = array(
    'this Sunday 8am',
    'this Sunday 10am',
    'this Sunday 12pm',
    'this Sunday 6:30pm',
    'this Wednesday 7pm',
    'this Saturday 10am'
    );

$current_time = strtotime('now');
foreach ($schedule as &$val) {
    $val = strtotime($val);
    // fix schedule to next week if time resolved to the past
    if ($val - $current_time < 0) $val += 604800; 
    }
sort($schedule);
$countdown = $schedule[0] - $current_time;

?>

<script type="text/javascript">
    var myTime = <?php echo $countdown; // just personally prefer full tags ?>;
    $('#countdown').countdown({ until: myTime}); 
</script>

【讨论】:

    猜你喜欢
    • 2018-11-01
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多