在做網站的時候經常會遇到一些有關於對時間的處理問題,如果服務器在國內針對的國內的用戶羣那還好說。
如果你的服務器是放在國外的,那你就要考慮到一些關於時間的問題了。
下面是在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,還有對時間,時區的理解。