javascript - How Do I Create A Countdown Time That Resets At A Specific Time - Stack Overflow

Let me first say I do not have a deep understanding of javascript but I know how to work my way around

Let me first say I do not have a deep understanding of javascript but I know how to work my way around enough to write small scripts for pages. A client of mine needs me to do the following for a website:

  1. Find the user's local time on their puter.
  2. Take that local time and subtract it from 6pm.
  3. Display that time in a countdown or just a statement letting the user know how much time is left for same day shipping.
  4. After 6pm the time resets or disappears until the next business day.

So far I've been able to create the logic for getting the time from the local puter. I thought I'd be able to use datejs but it does not calculate hours in a day.

Here is the current code I have:

var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()

var suffix = "AM";
if (hours >= 12) 
{
  suffix = "PM";
  hours = hours - 12;
 }

var suffix = "AM";

if (hours >= 12) 
{
  suffix = "PM"; 
  hours = hours - 12;
}

if (hours == 0) 
{
  hours = 12;
}

if (minutes < 10)
  minutes = "0" + minutes;

document.write("<b>" + hours + ":" + minutes + " " + suffix + "</b>");

Let me first say I do not have a deep understanding of javascript but I know how to work my way around enough to write small scripts for pages. A client of mine needs me to do the following for a website:

  1. Find the user's local time on their puter.
  2. Take that local time and subtract it from 6pm.
  3. Display that time in a countdown or just a statement letting the user know how much time is left for same day shipping.
  4. After 6pm the time resets or disappears until the next business day.

So far I've been able to create the logic for getting the time from the local puter. I thought I'd be able to use datejs but it does not calculate hours in a day.

Here is the current code I have:

var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()

var suffix = "AM";
if (hours >= 12) 
{
  suffix = "PM";
  hours = hours - 12;
 }

var suffix = "AM";

if (hours >= 12) 
{
  suffix = "PM"; 
  hours = hours - 12;
}

if (hours == 0) 
{
  hours = 12;
}

if (minutes < 10)
  minutes = "0" + minutes;

document.write("<b>" + hours + ":" + minutes + " " + suffix + "</b>");
Share Improve this question edited Jan 2, 2014 at 20:39 perror 7,43616 gold badges62 silver badges86 bronze badges asked Jul 18, 2012 at 18:47 Nina MorenaNina Morena 2551 gold badge8 silver badges17 bronze badges 1
  • 1 Alongside any other testing you are doing, remember to test daylight savings dates, otherwise the x hours output might be +/- 1 hour out – andyb Commented Jul 18, 2012 at 19:39
Add a ment  | 

4 Answers 4

Reset to default 3

How about this:

var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()

var suffix = "AM";
if (hours >= 12) {
suffix = "PM";
hours = hours - 12;
  }


if (minutes < 10)
minutes = "0" + minutes

if (suffix == "PM" && hours >= 6)
    {
 document.write("You're too late for next day shipping!");
}
    else
    {
    var hoursLeft = 5 - hours;
var minsLeft = 60 - minutes;
    document.write("<b> You've got " + hoursLeft  + " hours and " + minsLeft + " minutes left to qualify for next day shipping! </b>")
    }

if this site would let me ment on other people's answers I'd give the credit for this to Giovanni, but since I can't yet ment on other people's work, here's what needs to change.

var currentTime = new Date()
var hours = currentTime.getHours()
var minutes = currentTime.getMinutes()

var suffix = "AM";

if (minutes < 10)
minutes = "0" + minutes

if (hours >= 18)
{
 document.write("You're too late for next day shipping!");
}
else
{
var hoursLeft = 17 - hours;
var minsLeft = 60 - minutes;
if(minsLeft==60){
    minsLeft=0;
    hoursLeft++;
}

document.write("<b> You've got " + hoursLeft  + " and " + minsLeft + " minutes left to qualify for next day shipping! </b>")
}

The reason for this is that people who are ordering at 5AM might see think that they have to submit within the next hour for their shipping to be next day when in fact they have the next 13 hours.

EDIT: saw your timezone concern and here is a post that might interest you.

EDIT 2: posted the wrong link. The correct one should be up now, though it might be a bit of a dated answer.

Something similar I solved also yesterday, so this is easy. Here is the javascript code:

function start_onload(last_hour){
    var timeout_message = document.getElementById('timeout_message');
    var currentTime = new Date();
    var hours = currentTime.getHours();
    var minutes = currentTime.getMinutes();
    var seconds = currentTime.getSeconds();
    var expire_time = 0; // in seconds
    if (hours<last_hour) {
        expire_time += (last_hour-hours-1)*3600;
        expire_time += (59-minutes)*60;
        expire_time += (59-seconds);
    }
    else {
        timeout_message.innerHTML = 'It\'s after '+last_hour+' o\'clock!';
        return;
    }
    var expire_time = currentTime.getTime() + 1000*expire_time;
    //console.log(expire_time, hours, minutes, seconds, expire_time);
    function countdown_session_timeout() {
        var current_time = new Date().getTime();
        var remaining = Math.floor((expire_time - current_time)/1000);
        if (remaining>0) {
            hours = Math.floor(remaining/3600);
            minutes = Math.floor((remaining - hours*3600)/60);
            seconds = remaining%60;
            timeout_message.innerHTML = 'Countdown will stop in '+ hours + ' hours ' + minutes + ' min. ' + seconds + ' sec.';
            setTimeout(countdown_session_timeout, 1000);
        } else {
            timeout_message.innerHTML = 'Time is up!';
        }
    }
    countdown_session_timeout();
}

Full script @ pastebin. is here.

This is a simple countdown timer starting at 30 seconds from when the function is run and ending at 0. After reaching 0 it automatically reset the counter. It goes again to 30 second and this process is continued in a loop

  window.onload = function() {    startCountDown(30,
1000, myFunction); }


function startCountDown(i, p, f) {    var pause = p;    var fn = f;   
var countDownObj = document.getElementById("countDown");

   countDownObj.count = function(i) {
      //write out count
      countDownObj.innerHTML = i;
      if (i == 0) {
      //execute function
      //fn();
                startCountDown(30, 1000, myFunction);       //stop
      return;    }    setTimeout(function() {
      // repeat
      countDownObj.count(i - 1);
      },
      pause  
      );    }    //set it going    countDownObj.count(i); }

function myFunction(){};

    </script>

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745036960a4607578.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信