JS關於對時間的處理

在做網站的時候經常會遇到一些有關於對時間的處理問題,如果服務器在國內針對的國內的用戶羣那還好說。

如果你的服務器是放在國外的,那你就要考慮到一些關於時間的問題了。

下面是在magento中增加一個有關於js倒記時的js,這個在商城裏面很常見的,代碼如下:

		<script type="text/javascript">
		<?php
		$time_s = time();
		?>
		jQuery(function(){
			var dateTime = new Date();
			//var nowTime = new Date(<?php echo time()*1000;?>);
			//var nowTime = new Date("<?php echo date("M d H:i:s Y", ($time_s));?>");
            var nowTime = new Date(<?php echo time()*1000;?>);
			//endTime = new Date("Mar 01 00:00:00 2014");
			var endTime = new Date(<?php echo strtotime("2014-03-01 00:00:00")*1000;?>);
			setInterval(function(){
			  jQuery(".cutdown_time_block").each(function(){
				var objt = jQuery(this);
				var nMS=endTime.getTime() - nowTime.getTime();
				var myD=Math.floor(nMS/(1000 * 60 * 60 * 24));
				var myH=Math.floor(nMS/(1000*60*60)) % 24;
				if(myH < 10){
					myH = '0'+myH;
				}
				var myM=Math.floor(nMS/(1000*60)) % 60;
				if(myM < 10){
					myM = '0'+myM;
				}
				var myS=Math.floor(nMS/1000) % 60;
				if(myS < 10){
					myS = '0'+myS;
				}
				if(nMS < 0){
					myD = myH = myM = myS = 0;
				}
				var str = "<em class='num_item'>"+myD+"</em>"+"<em class='day_item'>"+"day"+"</em>"+"<em class='num_item'>"+myH+"</em>"+"<em class='space_item'>"+":"+"</em>"+"<em class='num_item'>"+myM+"</em>"+"<em class='space_item'>"+":"+"</em>"+"<em class='num_item'>"+myS+"</em>";
				
				
				objt.html(str);
			  });
			  nowTime = new Date(nowTime.valueOf() + 1000);
			}, 1000);
		});
		</script>

在magento中獲取時間戳的代碼是

date("Y-m-d", Mage::getModel('core/date')->timestamp(time()));

如果你直接是使用time的話,那將會得到GMT時間,因爲magento中存儲的時間默認是GMT。

而js的Date對象卻和本地電腦的時間相同,如果電腦上的時間和標準時間對不上,那這種倒計時的效果可能就會有問題了。

在這裏我們在Date對象裏傳了一個服務器的時間,這樣的話即使是你的電腦怎麼改時間,這個效果都不會產生變化了。

說一下,Date對象可以傳兩種參數,一種是字符串,另一種是整型數字(時間戳的1000倍)。兩種參數都可以正確的得到時間。

需要注意的是,當你用字符串參數時,

new Date("Mar 01 00:00:00 2014");

如上面的格式,如果你要到2號的話不能寫成:Mar 01 24:00:00 2014 ,這樣寫的話你在一些瀏覽器中就會報錯。



代碼很簡單,主要就是一個函數setInterval,還有對時間,時區的理解。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章