Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 增量+;JS中自动更新变量值_Javascript_Php_Html_Function_Counter - Fatal编程技术网

Javascript 增量+;JS中自动更新变量值

Javascript 增量+;JS中自动更新变量值,javascript,php,html,function,counter,Javascript,Php,Html,Function,Counter,我是JS和PHP的初学者,请原谅我的无知并容忍我:) 我正在尝试在我的网站上实现一个实时计数器。这个计数器应该显示到目前为止翻译的单词数,我希望这个数字更新“live”以反映翻译的单词数(基于我的年平均值) 为了简化,我设置了一个变量$wordsPerYear,它平均每年翻译1000个单词。我还将开始日期设置为10年前(2004年),因此它返回大约10000 这是我到目前为止的代码: <!DOCTYPE html> <html lang="en"> <head>

我是JS和PHP的初学者,请原谅我的无知并容忍我:)

我正在尝试在我的网站上实现一个实时计数器。这个计数器应该显示到目前为止翻译的单词数,我希望这个数字更新“live”以反映翻译的单词数(基于我的年平均值)

为了简化,我设置了一个变量$wordsPerYear,它平均每年翻译1000个单词。我还将开始日期设置为10年前(2004年),因此它返回大约10000

这是我到目前为止的代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Live Word Count</title>
    <style type="text/css">
    .count {
        width: 100%;
        margin: 0 auto;
        padding-top: 10%;
        text-align: center;
    }
    </style>
    <?php
    $now = time();
    $start = mktime(0, 0, 0, 1, 01, 2004);
    $wordsPerYear = 1000;
    $totalDays = (($now - $start) / 86400); // number of a seconds in a day
    $count = $totalDays / 365 * $wordsPerYear;
    $count = round($count);
    ?>

    <script type="text/javascript">
        var totalWords = <?php print($count); ?>;
        function updateCounter() {
            totalWords = totalWords + 1; // need to do something here to update to the real word count instead of incrementing by 1 each second
            document.getElementById("carb").innerHTML=totalWords; }
    </script>
</head>

<body onload="setInterval('updateCounter()', 1000);">
    <div class="count">
            <span id="carb">
                Loading Word Count...
            </span>
    </div>
</body>
</html>

实时字数
.伯爵{
宽度:100%;
保证金:0自动;
垫面:10%;
文本对齐:居中;
}
var totalWords=;
函数updateCounter(){
totalWords=totalWords+1;//需要在此处执行一些操作,以更新到实际字数,而不是每秒递增1
document.getElementById(“carb”).innerHTML=totalWords;}
正在加载字数。。。
我只需要使用setInterval('updateCounter()',1000),使用翻译的单词的真实值,而不是“假”实时增量,使这个数字更新为“实时”

所以,是的,我真的需要更新函数,将单词计数值更新为当前时间与开始日期的比率

谁能帮我做到这一点?我确信这是一件非常简单的事情,但我绞尽脑汁却无济于事。如果需要澄清来解释我想做什么,请告诉我


提前感谢

这不需要使用PHP和Javascript,因为您实际上并没有从服务器获取任何值—所有这些都是在真空中计算的

从根本上说,这是一个数学问题。Javascript以毫秒为单位计算日期差异,因此首先需要知道每毫秒翻译的单词数:每年单词数/每年天数/每天毫秒数。我使用31556900作为每年测试的单词值,因为这是一年中的秒数

接下来,您必须将该总数应用于当前日期-开始日期,并将其设置为您的开始总数

最后,创建一个区间函数,将字数添加到总数中

这应该做到:

;(function() {
    // Constants
    var   wpm = (31556900 / 365) / 86400000 // Words per year / days per year / milliseconds per day
    ,   start = new Date('January 1, 2004');

    var now = new Date()
    , total = Math.round((now - start) * wpm);

    var dom = { 
        counter: document.getElementById('counter')  
    };
    dom.counter.textContent = total;

    setInterval(function() {
        total += Math.round((new Date() - now) * wpm)
        dom.counter.textContent = total;
        now = new Date();
    }, 1000)
}())

你可以试试这个,我只是用javascript翻译你的PHP代码,然后根据服务器时间计算你的“totalWords”

<script>
var getServerTime = (function () {
    var baseTime = <?php echo time() * 1000; /* convert to milliseconds */ ?>,
        startTime = new Date().getTime();

    return function () {
        return baseTime + (new Date().getTime() - startTime);
    };
}());

var calculateTotalWords = function() {

    var currentServerTime = getServerTime();
    var start = new Date(2004, 0, 1);
    var wordsPerYear = 500000;
    var SecondInYear = 31556926; 
    var wordsPerSecond = wordsPerYear / SecondInYear;
    var delay  = (currentServerTime - start.getTime()) /1000;
    var count =  delay * wordsPerSecond ;   

    return Math.round(count);
}

var interval = setInterval(function(){
    var count = calculateTotalWords();
    document.getElementById("carb").innerHTML = count;

}, 1000);

</script>
</head>

<body>
    <div class="count">
            <span id="carb">
                Loading Word Count...
            </span>
    </div>
</body>
</html>

var getServerTime=(函数(){
var baseTime=,
startTime=新日期().getTime();
返回函数(){
返回baseTime+(新日期().getTime()-startTime);
};
}());
var calculateTotalWords=函数(){
var currentServerTime=getServerTime();
var开始=新日期(2004,0,1);
var wordsPerYear=500000;
第二年var=31556926;
var wordsPerSecond=wordsPerYear/SecondInYear;
var delay=(currentServerTime-start.getTime())/1000;
变量计数=延迟*字秒;
返回Math.round(count);
}
var interval=setInterval(函数(){
var count=calculateTotalWords();
document.getElementById(“carb”).innerHTML=count;
}, 1000);
正在加载字数。。。

不明白,如果只根据时间计算单词翻译数,则不需要PHP,也不需要加载页面以获得服务器时间。如果我错了,您将值
totalWords
存储在哪里?不确定您要问什么。。。我不认为我需要将
totalWords
存储在任何地方,因为它是在页面加载时计算的-或者我需要吗?var wpm=(words\u per\u year/365)/86400000旁注-如果您每年的平均单词数在10000左右,您可能希望放弃间隔,只计算页面加载时的单词数。10000字,平均每小时只有1个字。实际上接近500000字,这只是为了示例——因此,我们希望看到它实时更新:)我用您的每个解决方案创建了一个虚拟文件,输入了相同的开始日期和每年相同的字数,它们在给定的时间显示不同的数字。。。怪人谢谢你们的投入和帮助!我很困惑,您提供的代码没有实时更新——只在页面加载时更新。或者我遗漏了什么?正如@Kadjar解释的那样,第一次计算延迟了几天,但无法工作。我修改了计算,但如果我没有错的话,每年50万字,每分钟也只有0.95字。它不会更新太多。你是对的。但是我要求确认,每年的单词数超过200万,所以我完全错了(我只是做了一个估计)