Results 1 to 5 of 5

Thread: AM/PM incorrect with liveclock.js

  1. #1
    Join Date
    Sep 2011
    Posts
    5
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Default AM/PM incorrect with liveclock.js

    1) Script Title: Live Clock

    2) Script URL (on DD): http://www.dynamicdrive.com/dynamicindex6/clock2.htm

    3) Describe problem:
    I've been using the "liveclock.js" for a while now ( part of the style for the forum ), but just noticed something with the clock.

    I have it set for "12 hour", and no matter if the current hour is "12:xx:xx AM" or "12:xx:xx PM" the clock shows "AM" for both.

    Problem duplicated via your demo, too.

    My "liveclock.js"
    Code:
    ///////////////////////////////////////////////////////////
    // "Live Clock Advanced" script - Version 1.0
    // By Mark Plachetta (astroboy@zip.com.au)
    //
    // Get the latest version at:
    // http://www.zip.com.au/~astroboy/liveclock/
    //
    // Based on the original script: "Upper Corner Live Clock"
    // available at:
    // - Dynamic Drive (http://www.dynamicdrive.com)
    // - Website Abstraction (http://www.wsabstract.com)
    // ========================================================
    // CHANGES TO ORIGINAL SCRIPT:
    // - Gave more flexibility in positioning of clock
    // - Added date construct (Advanced version only)
    // - User configurable
    // ========================================================
    // Both "Advanced" and "Lite" versions are available free
    // of charge, see the website for more information on the
    // two scripts.
    ///////////////////////////////////////////////////////////
    
    ///////////////////////////////////////////////////////////
    /////////////// CONFIGURATION /////////////////////////////
    
    	// Set the clock's font face:
    	var myfont_face = "Verdana";
    
    	// Set the clock's font size (in point):
    	var myfont_size = "10";
    
    	// Set the clock's font color:
    	var myfont_color = "#ECECEC";
    	
    	// Set the clock's background color:
    	var myback_color = "transparent";
    
    	// Set the text to display before the clock:
    	var mypre_text = "";
    
    	// Set the width of the clock (in pixels):
    	var mywidth = 300;
    
    	// Display the time in 24 or 12 hour time?
    	// 0 = 24, 1 = 12
    	var my12_hour = 1;
    
    	// How often do you want the clock updated?
    	// 0 = Never, 1 = Every Second, 2 = Every Minute
    	// If you pick 0 or 2, the seconds will not be displayed
    	var myupdate = 1;
    
    	// Display the date?
    	// 0 = No, 1 = Yes
    	var DisplayDate = 1;
    
    /////////////// END CONFIGURATION /////////////////////////
    ///////////////////////////////////////////////////////////
    
    // Browser detect code
            var ie4=document.all
            var ns4=document.layers
            var ns6=document.getElementById&&!document.all
    
    // Global varibale definitions:
    
    	var dn = "";
    	var mn = "th";
    	var old = "";
    
    // The following arrays contain data which is used in the clock's
    // date function. Feel free to change values for Days and Months
    // if needed (if you wanted abbreviated names for example).
    	var DaysOfWeek = new Array(7);
    		DaysOfWeek[0] = "Sun";
    		DaysOfWeek[1] = "Mon";
    		DaysOfWeek[2] = "Tue";
    		DaysOfWeek[3] = "Wed";
    		DaysOfWeek[4] = "Thu";
    		DaysOfWeek[5] = "Fri";
    		DaysOfWeek[6] = "Sat";
    
    	var MonthsOfYear = new Array(12);
    		MonthsOfYear[0] = "Jan";
    		MonthsOfYear[1] = "Feb";
    		MonthsOfYear[2] = "Mar";
    		MonthsOfYear[3] = "Apr";
    		MonthsOfYear[4] = "May";
    		MonthsOfYear[5] = "Jun";
    		MonthsOfYear[6] = "Jul";
    		MonthsOfYear[7] = "Aug";
    		MonthsOfYear[8] = "Sep";
    		MonthsOfYear[9] = "Oct";
    		MonthsOfYear[10] = "Nov";
    		MonthsOfYear[11] = "Dec";
    
    // This array controls how often the clock is updated,
    // based on your selection in the configuration.
    	var ClockUpdate = new Array(3);
    		ClockUpdate[0] = 0;
    		ClockUpdate[1] = 1000;
    		ClockUpdate[2] = 60000;
    
    // For Version 4+ browsers, write the appropriate HTML to the
    // page for the clock, otherwise, attempt to write a static
    // date to the page.
    	if (ie4||ns6) { document.write('<span id="LiveClockIE" style="width:'+mywidth+'px; background-color:'+myback_color+'"></span>'); }
    	else if (document.layers) { document.write('<ilayer bgColor="'+myback_color+'" id="ClockPosNS" visibility="hide"><layer width="'+mywidth+'" id="LiveClockNS"></layer></ilayer>'); }
    	else { old = "true"; show_clock(); }
    
    // The main part of the script:
    	function show_clock() {
    		if (old == "die") { return; }
    	
    	//show clock in NS 4
    		if (ns4)
                    document.ClockPosNS.visibility="show"
    	// Get all our date variables:
    		var Digital = new Date();
    		var day = Digital.getDay();
    		var mday = Digital.getDate();
    		var month = Digital.getMonth();
    		var hours = Digital.getHours();
    
    		var minutes = Digital.getMinutes();
    		var seconds = Digital.getSeconds();
    
    	// Fix the "mn" variable if needed:
    		if (mday == 1) { mn = "st"; }
    		else if (mday == 2) { mn = "nd"; }
    		else if (mday == 3) { mn = "rd"; }
    		else if (mday == 21) { mn = "st"; }
    		else if (mday == 22) { mn = "nd"; }
    		else if (mday == 23) { mn = "rd"; }
    		else if (mday == 31) { mn = "st"; }
    
    	// Set up the hours for either 24 or 12 hour display:
    		if (my12_hour) {
    			dn = "AM";
    			if (hours > 12) { dn = "PM"; hours = hours - 12; }
    			if (hours == 0) { hours = 12; }
    		} else {
    			dn = "";
    		}
    		if (minutes <= 9) { minutes = "0"+minutes; }
    		if (seconds <= 9) { seconds = "0"+seconds; }
    
    	// This is the actual HTML of the clock. If you're going to play around
    	// with this, be careful to keep all your quotations in tact.
    		myclock = '';
    		myclock += '<font style="color:'+myfont_color+'; font-family:'+myfont_face+'; font-size:'+myfont_size+'pt;">';
    		myclock += mypre_text;
    		myclock += hours+':'+minutes;
    		if ((myupdate < 2) || (myupdate == 0)) { myclock += ':'+seconds; }
    		myclock += ' '+dn;
    		if (DisplayDate) { myclock += ' on '+DaysOfWeek[day]+', '+MonthsOfYear[month]+' '+mday+mn; }
    		myclock += '</font>';
    
    		if (old == "true") {
    			document.write(myclock);
    			old = "die";
    			return;
    		}
    
    	// Write the clock to the layer:
    		if (ns4) {
    			clockpos = document.ClockPosNS;
    			liveclock = clockpos.document.LiveClockNS;
    			liveclock.document.write(myclock);
    			liveclock.document.close();
    		} else if (ie4) {
    			LiveClockIE.innerHTML = myclock;
    		} else if (ns6){
    			document.getElementById("LiveClockIE").innerHTML = myclock;
                    }            
    
    	if (myupdate != 0) { setTimeout("show_clock()",ClockUpdate[myupdate]); }
    }
        setTimeout("show_clock()",1000)

  2. #2
    Join Date
    Jul 2006
    Location
    Canada
    Posts
    2,581
    Thanks
    13
    Thanked 28 Times in 28 Posts

    Default

    Do you want just the time displayed? If so why don't you consider something like this: (just add to the head of your page)

    Code:
    <style type="text/css">
    #clock {
      position: absolute;
      left: 0px;
      top: 0px;
      padding: 5px;
      background: #F0F0F0;
      font: 12pt arial;
    }
    </style>
    <script type="text/javascript">
    var init = function() {
      var div = document.createElement("div");
      div.id = "clock";
      document.body.appendChild(div);
      clock();
    }, pad = function(str) {
      str = str.toString();
      if (str.length == 1) return "0"+str;
      else return str;
    }, clock = function(str) {
      var now = new Date(),
        hour = now.getHours(),
        min = pad(now.getMinutes());
        sec = pad(now.getSeconds());
      var ampm = "AM";
      if (hour >= 12) ampm = "PM";
      var fhour = hour;
      if (hour > 12) fhour = hour - 12;
      if (hour == 0) fhour = 12;
      str = fhour+":"+min+":"+sec+" "+ampm
      document.getElementById("clock").innerHTML = str;
      setTimeout(function() { clock(str); }, 1000);
    }
    window.onload = init;
    </script>
    You can style the clock however you want by manipulating the #clock part of the style tag.
    Last edited by mburt; 09-10-2011 at 08:04 PM.
    - Mike

  3. #3
    Join Date
    Sep 2011
    Posts
    5
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Default

    Quote Originally Posted by mburt View Post
    Do you want just the time displayed? If so why don't you consider something like this: (just add to the head of your page)
    I would like the "AM / PM" to work properly for all 24 hours of the day.
    Right now, with the current code, it works properly 23 hours of the day.
    When my computer is reading 12:XX PM this script reads it as 12:XX AM.

  4. #4
    Join Date
    Sep 2011
    Posts
    5
    Thanks
    1
    Thanked 0 Times in 0 Posts

    Default

    I probably should post this in the "Bug" section.

  5. #5
    Join Date
    Mar 2005
    Location
    SE PA USA
    Posts
    30,495
    Thanks
    82
    Thanked 3,449 Times in 3,410 Posts
    Blog Entries
    12

    Default

    Quote Originally Posted by RocknRoll View Post
    I probably should post this in the "Bug" section.
    Yes. And answered there. Good Catch.

    I'm closing this thread.

    See:

    http://www.dynamicdrive.com/forums/s...686#post260686

    for more information.
    - John
    ________________________

    Show Additional Thanks: International Rescue Committee - Donate or: The Ocean Conservancy - Donate or: PayPal - Donate

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •