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

Php DateTime在https中返回错误值,在http中返回正确值,php,datetime,https,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

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

<?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> 

函数serverTime(){
var-time=null;
$.ajax({url:'https://url/timeset.php', 
async:false,数据类型:“text”,
成功:函数(文本){
时间=新日期(文本);
},错误:函数(http、消息、exc){
时间=新日期();
}}); 
返回时间;
}
如果脚本调用日期时间,则返回上次在浏览器中打开php文件时的日期时间。因此,如果有人打开脚本所在的页面,则上述代码返回的日期时间是错误的,并且当刷新该页面时,返回的日期时间不会改变,仍然返回不正确的日期时间,即旧的日期时间

有没有什么方法可以让我每隔一秒钟左右刷新一次php?
因为它只是一个只有日期时间的小文件,所以不应该占用太多资源…

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


感谢您在更新中的建议

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

  • 始终亲自访问有问题的URL,查看其行为是否相同
  • $.ajax
    中,您应该设置
    缓存:false
  • $.ajax
    中,您可以手动在URL后面附加一个GET参数,以始终像下面这样获取新鲜的
    URL:'https://url/timeset.php?fresh=“+randomNumberFunction()
  • 在PHP中,在脚本顶部设置几个标题:
    header(“Expires:Mon,1990年1月1日00:00:00 GMT”);标头(“缓存控制:无存储,无缓存,必须重新验证”)
  • 熟悉web浏览器调试工具中的“网络”选项卡

我刚刚在我的服务器上测试了上述代码。它为HTTP和HTTPS返回相同的时间。我认为唯一的问题是缓存。您确定所有缓存都已关闭吗?如果使用
date\u default\u timezone\u set('Asia/Kolkata'),会发生什么情况;回音日期(“MJ,YH:i:SO)
?此应用程序是否部署到一个web场中的多个服务器上?如果是这样,可能您只是在访问另一个时钟设置错误的服务器。@JohnCrawford是的,我非常确定缓存我们是关闭的。当我在浏览器中打开网页并在刷新后显示不正确的时间时,会显示正确的时间。是否有任何方法可以确保这一点缓存关闭了?@MonkeyZeus我尝试了代码,但问题是一样的。