我是JS和PHP的初学者,所以请原谅我的无知并忍受我:)
我正在尝试在我的网站上实施一个实时计数器。此计数器应显示到目前为止翻译的单词数量,我希望此数字更新为“实时”以反映翻译单词的数量(根据我的年平均值)。
为了简化,我设置了一个变量$ wordsPerYear,其平均每年翻译一次,比如1000。我还将开始日期设置为10年前(2004年),以便返回大约10,000。
所以这是我目前的代码:
<!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>
我只需要能够使用setInterval('updateCounter()',1000)将这个数字更新为“实时”,使用翻译的单词的实际值而不是“假”实时增量。
所以是的,我真的只需更新该功能,将该字数统计值更新为当前时间与开始日期的比率。
有人能帮助我实现这个目标吗?我确信这是一件非常简单的事情,但是我绞尽脑汁无济于事。如果需要澄清来解释我想做什么,请告诉我!
提前致谢
答案 0 :(得分:2)
没有必要同时使用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)
}())
答案 1 :(得分:1)
你可以尝试这个,我只是在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>