jquery.jclock.js using different time zone offsets

http://en.wikipedia.org/wiki/Coordinated_Universal_Time
http://en.wikipedia.org/wiki/ISO_8601
http://en.wikipedia.org/wiki/List_of_UTC_time_offsets
http://msdn.microsoft.com/zh-cn/library/microsoft.sqlserver.notificationservices.timezone.utcoffset(v=sql.90).aspx

jQuery jclock code:

  1 /*
  2 * jQuery jclock - Clock plugin - v 2.4.0
  3 * http://plugins.jquery.com/project/jclock
  4 *
  5 * Copyright (c) 2007-2013 Doug Sparling <http://www.dougsparling.com>
  6 * Licensed under the MIT License:
  7 * http://www.opensource.org/licenses/mit-license.php
  8 */
  9 (function($) {
 10  
 11   $.fn.jclock = function(options) {
 12     var version = '2.3.4';
 13  
 14     // options
 15     var opts = $.extend({}, $.fn.jclock.defaults, options);
 16          
 17     return this.each(function() {
 18       $this = $(this);
 19       $this.timerID = null;
 20       $this.running = false;
 21  
 22       // Record keeping for seeded clock
 23       $this.increment = 0;
 24       $this.lastCalled = new Date().getTime();
 25  
 26       var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
 27  
 28       $this.format = o.format;
 29       $this.utc = o.utc;
 30       // deprecate utc_offset (v 2.2.0)
 31       $this.utcOffset = (o.utc_offset != null) ? o.utc_offset : o.utcOffset;
 32       $this.seedTime = o.seedTime;
 33       $this.timeout = o.timeout;
 34  
 35       $this.css({
 36         fontFamily: o.fontFamily,
 37         fontSize: o.fontSize,
 38         backgroundColor: o.background,
 39         color: o.foreground
 40       });
 41  
 42       // %a
 43       $this.daysAbbrvNames = new Array(7);
 44       $this.daysAbbrvNames[0] = "Sun";
 45       $this.daysAbbrvNames[1] = "Mon";
 46       $this.daysAbbrvNames[2] = "Tue";
 47       $this.daysAbbrvNames[3] = "Wed";
 48       $this.daysAbbrvNames[4] = "Thu";
 49       $this.daysAbbrvNames[5] = "Fri";
 50       $this.daysAbbrvNames[6] = "Sat";
 51  
 52       // %A
 53       $this.daysFullNames = new Array(7);
 54       $this.daysFullNames[0] = "Sunday";
 55       $this.daysFullNames[1] = "Monday";
 56       $this.daysFullNames[2] = "Tuesday";
 57       $this.daysFullNames[3] = "Wednesday";
 58       $this.daysFullNames[4] = "Thursday";
 59       $this.daysFullNames[5] = "Friday";
 60       $this.daysFullNames[6] = "Saturday";
 61  
 62       // %b
 63       $this.monthsAbbrvNames = new Array(12);
 64       $this.monthsAbbrvNames[0] = "Jan";
 65       $this.monthsAbbrvNames[1] = "Feb";
 66       $this.monthsAbbrvNames[2] = "Mar";
 67       $this.monthsAbbrvNames[3] = "Apr";
 68       $this.monthsAbbrvNames[4] = "May";
 69       $this.monthsAbbrvNames[5] = "Jun";
 70       $this.monthsAbbrvNames[6] = "Jul";
 71       $this.monthsAbbrvNames[7] = "Aug";
 72       $this.monthsAbbrvNames[8] = "Sep";
 73       $this.monthsAbbrvNames[9] = "Oct";
 74       $this.monthsAbbrvNames[10] = "Nov";
 75       $this.monthsAbbrvNames[11] = "Dec";
 76  
 77       // %B
 78       $this.monthsFullNames = new Array(12);
 79       $this.monthsFullNames[0] = "January";
 80       $this.monthsFullNames[1] = "February";
 81       $this.monthsFullNames[2] = "March";
 82       $this.monthsFullNames[3] = "April";
 83       $this.monthsFullNames[4] = "May";
 84       $this.monthsFullNames[5] = "June";
 85       $this.monthsFullNames[6] = "July";
 86       $this.monthsFullNames[7] = "August";
 87       $this.monthsFullNames[8] = "September";
 88       $this.monthsFullNames[9] = "October";
 89       $this.monthsFullNames[10] = "November";
 90       $this.monthsFullNames[11] = "December";
 91  
 92       $.fn.jclock.startClock($this);
 93  
 94     });
 95   };
 96        
 97   $.fn.jclock.startClock = function(el) {
 98     $.fn.jclock.stopClock(el);
 99     $.fn.jclock.displayTime(el);
100   }
101  
102   $.fn.jclock.stopClock = function(el) {
103     if(el.running) {
104       clearTimeout(el.timerID);
105     }
106     el.running = false;
107   }
108  
109   /* if the frequency is "once every minute" then we have to make sure this happens
110    * when the minute changes. */  
111   // got this idea from digiclock http://www.radoslavdimov.com/jquery-plugins/jquery-plugin-digiclock/
112   function getDelay(timeout) {
113       if (timeout == 60000) {
114           var now = new Date();
115           timeout = 60000 - now.getSeconds() * 1000; // number of seconds before the next minute
116       }
117       return timeout;
118   }
119   
120   $.fn.jclock.displayTime = function(el) {
121     var time = $.fn.jclock.currentTime(el);
122     var formatted_time = $.fn.jclock.formatTime(time, el);
123     el.attr('currentTime', time.getTime())
124     el.html(formatted_time);
125     el.timerID = setTimeout(function(){$.fn.jclock.displayTime(el)}, getDelay(el.timeout));
126   }
127 
128   $.fn.jclock.currentTime = function(el) {
129     if(typeof(el.seedTime) == 'undefined') {
130       // Seed time not being used, use current time
131       var now = new Date();
132     } else {
133       // Otherwise, use seed time with increment
134       el.increment += new Date().getTime() - el.lastCalled;
135       var now = new Date(el.seedTime + el.increment);
136       el.lastCalled = new Date().getTime();
137     }
138  
139     if(el.utc == true) {
140       var localTime = now.getTime();
141       var localOffset = now.getTimezoneOffset() * 60000;
142       var utc = localTime + localOffset;
143       var utcTime = utc + (3600000 * el.utcOffset);
144       var now = new Date(utcTime);
145     }
146 
147     return now
148   }
149  
150   $.fn.jclock.formatTime = function(time, el) {
151  
152     var timeNow = "";
153     var i = 0;
154     var index = 0;
155     while ((index = el.format.indexOf("%", i)) != -1) {
156       timeNow += el.format.substring(i, index);
157       index++;
158  
159       // modifier flag
160       //switch (el.format.charAt(index++)) {
161       //}
162       
163       var property = $.fn.jclock.getProperty(time, el, el.format.charAt(index));
164       index++;
165       
166       //switch (switchCase) {
167       //}
168  
169       timeNow += property;
170       i = index
171     }
172  
173     timeNow += el.format.substring(i);
174     return timeNow;
175   };
176  
177   $.fn.jclock.getProperty = function(dateObject, el, property) {
178  
179     switch (property) {
180       case "a": // abbrv day names
181           return (el.daysAbbrvNames[dateObject.getDay()]);
182       case "A": // full day names
183           return (el.daysFullNames[dateObject.getDay()]);
184       case "b": // abbrv month names
185           return (el.monthsAbbrvNames[dateObject.getMonth()]);
186       case "B": // full month names
187           return (el.monthsFullNames[dateObject.getMonth()]);
188       case "d": // day 01-31
189           return ((dateObject.getDate() < 10) ? "0" : "") + dateObject.getDate();
190       case "H": // hour as a decimal number using a 24-hour clock (range 00 to 23)
191           return ((dateObject.getHours() < 10) ? "0" : "") + dateObject.getHours();
192       case "I": // hour as a decimal number using a 12-hour clock (range 01 to 12)
193           var hours = (dateObject.getHours() % 12 || 12);
194           return ((hours < 10) ? "0" : "") + hours;
195       case "l": // hour as a decimal number using a 12-hour clock (range 1 to 12)
196           var hours = (dateObject.getHours() % 12 || 12);
197           //return ((hours < 10) ? "0" : "") + hours;
198           return hours;
199       case "m": // month number
200           return (((dateObject.getMonth() + 1) < 10) ? "0" : "") + (dateObject.getMonth() + 1);
201       case "M": // minute as a decimal number
202           return ((dateObject.getMinutes() < 10) ? "0" : "") + dateObject.getMinutes();
203       case "p": // either `am' or `pm' according to the given time value,
204           // or the corresponding strings for the current locale
205           return (dateObject.getHours() < 12 ? "am" : "pm");
206       case "P": // either `AM' or `PM' according to the given time value,
207           return (dateObject.getHours() < 12 ? "AM" : "PM");
208       case "S": // second as a decimal number
209           return ((dateObject.getSeconds() < 10) ? "0" : "") + dateObject.getSeconds();
210       case "y": // two-digit year
211           return dateObject.getFullYear().toString().substring(2);
212       case "Y": // full year
213           return (dateObject.getFullYear());
214       case "%":
215           return "%";
216     }
217  
218   }
219        
220   // plugin defaults (24-hour)
221   $.fn.jclock.defaults = {
222     format: '%H:%M:%S',
223     utcOffset: 0,
224     utc: false,
225     fontFamily: '',
226     fontSize: '',
227     foreground: '',
228     background: '',
229     seedTime: undefined,
230     timeout: 1000 // 1000 = one second, 60000 = one minute
231   };
232  
233 })(jQuery);

用法:

 1 <html>
 2 <head>
 3   <title>jclock - multiple clocks using different time zone offsets</title>
 4 
 5   <script type="text/javascript" src="jquery-1.3.1.min.js"></script>
 6   <script type="text/javascript" src="jquery.jclock.js"></script>
 7 
 8   <script type="text/javascript">
 9     $(function($) {
10       var optionsEST = {
11         utc: true,
12         utcOffset: -5
13       }
14       $('#jclock1').jclock(optionsEST);
15 
16       var optionsCST = {
17         utc: true,
18         utcOffset: -6
19       }
20       $('#jclock2').jclock(optionsCST);
21 
22       var optionsIndia = {
23         utc: true,
24         utcOffset: 5.525         
26       }
27       $('#jclock3').jclock(optionsIndia);
28       
29         var optionsBeijing = {                
30         utc: true,
31         utcOffset: 8,
32         format: '%I:%M:%S %p',//12小時,默認24小時
33          fontFamily: 'Verdana, Times New Roman',
34         fontSize: '20px',
35         foreground: 'yellow',
36         background: 'red'
37 
38       }
39       $('#jclock4').jclock(optionsBeijing );
40 
41 
42     });
43   </script>
44 
45 </head>
46 
47 <body>
48 
49 <p>EST: <span id="jclock1"></span></p>
50 
51 <p>CST: <span id="jclock2"></span></p>
52 
53 <p>India: <span id="jclock3"></span></p>
54 
55 <p>beijing: <span id="jclock4"></span></p>
56 
57 
58 </body>
59 </html>
$.fn.init_cal = function(date,c_id){
		$("#"+c_id).html(cal_content);
		 window.time_span = $("#beijing_time");//标签显示时钟
          //$('#beijing_time').jclock(optionsBeijing );
		 //setTimeout(function(){$("head").append('ge');},10);
        var  zone=8; //设置时区 北京时区
        var isitlocal=true;
		 var oLocal = new Date(); 
		 var off = ( oLocal.getTimezoneOffset() ) * 60 * 1000;
		 var now=new Date();
         var ofst =now.getTimezoneOffset()/60 ;
        var secs=now.getSeconds();
       var sec=-1.57+Math.PI*secs/30;
       var mins=now.getMinutes();
       var min=-1.57+Math.PI*mins/30;
       var hr=(isitlocal)?now.getHours():(now.getHours() + parseInt(ofst)) + parseInt(zone);
		var nian=now.getFullYear();
		var yue=now.getMonth()+1;
		var ri=now.getDate();
		var shi=now.getHours();
		var fen=now.getMinutes();
		var miao=now.getSeconds();
		var d=nian+'-'+yue+'-'+ri+' '+hr+':'+min+':'+sec;	
		 var time=new Date(d).getTime();//取得当前毫秒数//1370173636;//d.getHours();
		// setTimeout(function() { clock(time); },10); //設置時間
        //setTimeout(function(){$("head").append(d);},10);
		//這是一個時鍾
	    setTimeout(function() { clock(time); },10);

		$("#"+c_id).append(detail_dialog);
		var elem_id = 'cal_content';
		generic_cal(date,elem_id);
		record.elem_id = elem_id;
		record.nav_date = date_part(date);
		$("#cal_header>.cal_today_btn").click(function(){
			record.nav_date = date_part(new Date());
			generic_cal(record.nav_date,elem_id);
		});
		$("#day_select .cal_month").each(function(){
			$(this).click(function(){
				record.nav_date.setMonth($(this).attr("m_v"));
				generic_cal(record.nav_date,elem_id);
			});
		});
		$("#prev_btn").click(function(){
			record.nav_date = add_date(record.nav_date,-1,"month");
			generic_cal(record.nav_date,elem_id);
		});
		$("#next_btn").click(function(){
			record.nav_date = add_date(record.nav_date,1,"month");
			generic_cal(record.nav_date,elem_id);
		});
		$("#sel_btn,#cal_year").click(function(){
			templates.mousedown_hide_ele("open_sel_div");
			$("#open_sel_div").show();
		});
		$("#festival_sel").click(function(){
			templates.mousedown_hide_ele("festival_sel_div");
			$("#festival_sel_div").show();
		});
		templates.init_sel_year();
		templates.init_sel_festival();
		$(document).mouseleave(function(ev){
			clearTimeout(pResizeTimer);
			$("#detailDialog").hide();
		});
		$("#"+c_id).mouseleave(function(ev){
			clearTimeout(pResizeTimer);
			$("#detailDialog").hide();
		});
		
	};

  demo: http://www.dusystem.com/ChineseCalendar.aspx

http://randomibis.com/coolclock/

哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
原文地址:https://www.cnblogs.com/geovindu/p/3114360.html