在php foreach中,我会使用客户端时区转换日期。
事实上,它不起作用:
<html>
<body>
<?php foreach ($topic as $post) { ?>
<span id="date">
<script type='text/javascript'>
document.write(window.date('<?php echo $date;?>'));
</script>
</span>
<?php } ?>
<script type='text/javascript'>
function date(VarDate) {
var b = VarDate.split(/[: ]/g);
var m = {jan:0, feb:1, mar:2, apr:3, may:4, jun:5, jul:6, aug:7, sep:8, oct:9, nov:10, dec:11};
var isoTime = Date.UTC(b[7], m[b[1].toLowerCase()], b[2], b[3], b[4], b[5]);
var date = new Date(isoTime).toLocaleDateString(navigator.language, {day: '2-digit', month:'2-digit', year:'2-digit'});
var time = new Date(isoTime).toLocaleTimeString(navigator.language, {hour: '2-digit', minute:'2-digit'});
return time + ' · ' + date;
}
</script>
</body>
</html>
当我把函数放在循环之前时,它就可以工作了,但脚本是在页脚中启动的,以优化加载。
我正在寻找更好的东西。抱歉我英语不好。
正如Sanchit所说,您可以重写
document.write(window.date('<?php echo $date;?>'));
部分,如下所示(如果您使用jQuery)
$(document).ready(function(){
// write here where needed: using jQuery the $('') approach is the easiest way
});
通过这种方式,一旦所有脚本都加载到页面中并定义了所有函数,就会执行脚本。无论如何,在这种情况下,如果在页脚中移动此函数定义,则保存的字节将部分用于在页面准备就绪时激发脚本所需的开销。
根据$topic中$post的数量,这种方法可能会减慢加载时间。也许,将定义放入包含在页面标题中的外部Javascript(这样浏览器就可以缓存它)会更快。