【问题标题】:Server time instead of client time JAVASCRIPT服务器时间而不是客户端时间 JAVASCRIPT
【发布时间】:2013-10-14 05:27:07
【问题描述】:

是否可以将此脚本与服务器时间而不是客户端时间一起使用。 (用于检查时间是否过去)它现在使用客户端时间,这是一个问题。 (也许用php??)

<script>
var end = new Date('02/19/2012 10:1 AM');

    var _second = 1000;
    var _minute = _second * 60;
    var _hour = _minute * 60;
    var _day = _hour * 24;
    var timer;

    function showRemaining() {
        var now = new Date();
        var distance = end - now;
        if (distance < 0) {

            clearInterval(timer);
            document.getElementById('countdown').innerHTML = 'EXPIRED!';

            return;
        }
        var days = Math.floor(distance / _day);
        var hours = Math.floor((distance % _day) / _hour);
        var minutes = Math.floor((distance % _hour) / _minute);
        var seconds = Math.floor((distance % _minute) / _second);

        document.getElementById('countdown').innerHTML = days + 'days ';
        document.getElementById('countdown').innerHTML += hours + 'hrs ';
        document.getElementById('countdown').innerHTML += minutes + 'mins ';
        document.getElementById('countdown').innerHTML += seconds + 'secs';
    }

    timer = setInterval(showRemaining, 1000);
</script>
<div id="countdown"></div>

【问题讨论】:

  • 当然 - 只需发送请求即可。
  • 用 PHP 创建页面,用时间戳回显一个 javascript 变量,然后让 javascript 递增和重新格式化。重复的 AJAX 调用太贵了
  • 我认为丹尼尔的评论实际上是the对这个问题的回答
  • @DanielA.White 你有例子吗?
  • @user2519424 自己尝试一些代码 - 然后如果/当您遇到问题时,请寻求帮助。你会从自己做的事情中学到更多,而不是交给所有的代码

标签: javascript php time


【解决方案1】:

你可以从 ajax 请求中获取时间,或者使用类似这样的东西:

<?php
 $now = date('d-m-Y');
 $end= "01-01-2013"
 $date = strtotime($end) - strtotime($now);
 $days = date('d', $date);
 $monthes= date('m', $date);
 $years= date('Y', $date);
?> 
<script>
  var days = "<?= $days ?>";
  var monthes= "<?= $monthes?>";
  var years= "<?= $years?>";

    document.getElementById('countdown').innerHTML = days+ ' days';

    document.getElementById('countdown').innerHTML += monthes+ ' monthes';

    document.getElementById('countdown').innerHTML += years+ ' years';
</script>

【讨论】:

  • 对不起,你有更多的例子结合上面的代码,我无法修复它
  • 这将产生一个固定的日期而不是服务器时间。
  • function showRemaining() { var now = new Date(); var 距离 = 结束 - 现在;这是问题所在, now = new Date();是客户端,上面需要是服务器端已经是固定日期了。
【解决方案2】:

Puku 的答案将返回一个固定的日期,而不是服务器时间。 他似乎已经修复了它。

我提议:

<script>
    var date = <? echo time(); ?>;
    // etc...
</script>

这将获取自 Unix 纪元 IIRC 以来的 (server) 秒数,并将其作为 int 填充到变量“date”中。注意&lt;??&gt; 之间的所有内容都是PHP,因此在服务器上执行。

注意我没有使用缩写语法,比如 puku。默认情况下我没有它,我无法更改它,所以我认为对有同样问题的人使用这种表示法会很好。

【讨论】:

  • var now = new Date();这就是问题。这需要是服务器时间,而不是客户端时间。
  • 是的,我的回答会在我调试之后这样做。
【解决方案3】:

http://www.roseindia.net/ajax/ajax-first-example.shtml 找到了一个与 Ajax 类似的示例

[更新] 在 cmets 说明我之前的帖子这不起作用之后,我已经检查了所有内容并更改了 JavaScript 和 PHP 文件(现在提供完整代码)。这段代码现在可以工作了。我已尝试使其与原始示例和之前提供的链接尽可能相似,而不是优化内容(我将把它留给你)。

<script>
var end = new Date('02/19/2014 10:1 AM');
var _second = 1000;
var _minute = _second * 60;
var _hour = _minute * 60;
var _day = _hour * 24;
var timer;
var distance;

function startShowRemaining(strnow) {
    var now = new Date(strnow);
    distance = end - now;
    //To prevent 1 sec. lag, we make first a direct call to showRemaining
    showRemaining(); 
    //Then each second, we decrement count and show info
    timer = setInterval(countRemaining, 1000);
}
function countRemaining() {
    distance = distance - 1000; //we substract a second (1000 ms) with each call
    showRemaining();
}
function showRemaining() {
    if (distance < 0) {
        clearInterval(timer);
        document.getElementById('countdown').innerHTML = 'EXPIRED!';
        return;
    }
    var days = Math.floor(distance / _day);
    var hours = Math.floor((distance % _day) / _hour);
    var minutes = Math.floor((distance % _hour) / _minute);
    var seconds = Math.floor((distance % _minute) / _second);

    document.getElementById('countdown').innerHTML = days + ' days ';
    document.getElementById('countdown').innerHTML += hours + ' hrs ';
    document.getElementById('countdown').innerHTML += minutes + ' mins ';
    document.getElementById('countdown').innerHTML += seconds + ' secs';        
}
function postRequest(strURL) {
    var xmlHttp;
    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        var xmlHttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        var xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlHttp.open('POST', strURL, true);
    xmlHttp.setRequestHeader('Content-Type', 
       'application/x-www-form-urlencoded');
    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState == 4) {
            startShowRemaining(xmlHttp.responseText);
        }
    }
    xmlHttp.send(strURL);
}

postRequest('time.php');  

</script>
<div id="countdown"></div>    

并创建文件:time.php

<?php
print date("d/m/Y H:i:s");
?>

PHP 文件被调用一次以获取当前日期,然后“距离”变量每秒递减,以防止进一步使用带宽的 Ajax 调用......无论如何可能需要超过一秒。使用了不同的递减函数,因此我们可以立即调用 showRemaining 而不递减它(您也可以在第一次调用时开始增加 1000 并仅使用一个函数..)。

无论如何,我更喜欢 Puku 方法,只使用 PHP 为“现在”变量编写正确的值,它更简单。这个很好,只是作为 Ajax 使用的一个例子。

【讨论】:

  • 它可以工作,但不会自动更新,但会显示正确的时间。之后就不会倒计时了
  • 更改了代码,现在可以正常工作并减少...抱歉在没有完全测试的情况下发布。确保您正在从 PHP 网络服务器测试 time.php 调用是否正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
相关资源
最近更新 更多