DateTime在https中返回错误的值,在http中返回正确的值

时间:2013-10-21 13:40:52

标签: php datetime https

我有一个简单的文件来返回当前服务器时间,这是我的代码

<?php 
$now = new DateTime(null, new DateTimeZone('Asia/Kolkata'));
echo $now->format("M j, Y H:i:s O")."\n"; 
?>

当我通过 http 打开文件时,它显示正确的时间,但当我用 https 打开它时,时间从几秒钟到几乎30分钟。

起初我认为这是一个缓存问题,但即使在我禁用缓存后,这仍然存在。

修改

使用此脚本调用时间,该脚本位于主php文件中

<script type="text/javascript">
function serverTime() { 
    var time = null; 
    $.ajax({url: 'https://url/timeset.php', 
        async: false, dataType: 'text', 
        success: function(text) { 
            time = new Date(text); 
        }, error: function(http, message, exc) { 
            time = new Date(); 
    }}); 
    return time; 
}

</script> 

如果脚本调用datetime,则在上次在浏览器中打开php文件时返回日期时间。因此,如果有人打开页面,那么脚本就在上面代码返回的日期时间是错误的,当刷新该页面时,返回的日期时间不会改变,仍然会返回不正确的旧日期时间。

有没有什么办法可以让我每隔一秒左右刷新一下这个? 由于它只有一个只有日期时间的小文件,所以它会使用很多资源......

2 个答案:

答案 0 :(得分:1)

在您的更新中,我看到您正在使用AJAX来检索此数据,因此以下是一些调试技术:

  • 始终实际访问相关网址并查看其是否采取相同的行动
  • $.ajax中,您应该设置cache: false
  • $.ajax中,您可以手动附加带有GET参数的网址,以便始终像url: 'https://url/timeset.php?fresh='+randomNumberFunction()
  • 一样获取新鲜内容
  • 在PHP中,在脚本顶部设置了几个标题:header("Expires: Mon, 1 Jan 1990 00:00:00 GMT"); header("Cache-Control: no-store, no-cache, must-revalidate");
  • 熟悉Web浏览器中的“网络”选项卡调试工具

答案 1 :(得分:0)

我设法让它工作,而不是让脚本从php文件中删除日期,我只是使用javascript日期函数以我需要的格式和时区返回日期。

感谢您的建议