在做网站的时候经常会遇到一些有关于对时间的处理问题,如果服务器在国内针对的国内的用户群那还好说。
如果你的服务器是放在国外的,那你就要考虑到一些关于时间的问题了。
下面是在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,还有对时间,时区的理解。