Php 跨页面刷新保存计数器值

Php 跨页面刷新保存计数器值,php,javascript,html,Php,Javascript,Html,我想每2.7秒给一个值加1;我不希望每次刷新页面时都重置它 有没有一种方法可以扩充下面的代码使之成为可能?我对php一无所知,对JS也知之甚少,但我想学习php,我觉得它可能是一个解决方案 这是带柜台的电话线 <span id="counter" class="bladeometer" style="letter-spacing: 3px;">198567970</span> 允许您在每台计算机上的页面加载之间持久化数据 // load the time from wh

我想每2.7秒给一个值加1;我不希望每次刷新页面时都重置它

有没有一种方法可以扩充下面的代码使之成为可能?我对php一无所知,对JS也知之甚少,但我想学习php,我觉得它可能是一个解决方案

这是带柜台的电话线

<span id="counter" class="bladeometer" style="letter-spacing: 3px;">198567970</span>
允许您在每台计算机上的页面加载之间持久化数据

// load the time from what was saved, or if absent, pick 0
var time = localStorage['timer'] || 0;
var el = document.getElementById('counter');

var timerId;

function startCount() {
    timerId = setInterval(function() {
        time = time + 1;
        localStorage['timer'] = time;
        el.textContent = time;
    }, 2700);
}

您可以使用服务器发送的事件。以下是解释和示例

我假设您希望此计数器是全局计数器,而不是每个用户。 你展示的方法不好。如果您使用AJAX或其他存储值的方法,它可能会起作用,但这并不是真正必要的。事实上,我认为这是一个愚蠢的解决方案

由于计数器不断增加,您需要找到始终存在的东西,然后您可以从中计算计数器值。当然,我说的是时间

算出你的计数器什么时候会在零位。把那作为你的参考时间。现在,每次打开页面时,使用
(当前时间-参考时间)*增加值来计算计数器,因此,由于增加值是
1/2.7
(感谢Matthew),公式是
(当前时间秒-参考时间秒)/2.7)
!这是每次页面加载时计数器需要获得的值

这样,您的代码将在页面上实时更新计数器,而我给出的时间计算将确保计数器编号在“幕后”是正确的,这样当您刷新页面时,您将获得与您在整个页面上获得的值相同的值。只需确保使用一个时区并坚持使用它,以避免来自不同地区的用户使用不同的计数器值(略有不同,但仍然不需要)


底线:使用您的代码在页面上实时更新计数器,并使用我向您展示的内容确定页面加载时计数器的起始值。

这完全可以通过Javascript实现。页面刷新后,它将保持同步,甚至对所有访问该网站的用户都是一样的

var el = document.getElementById('counter');
//Set the date of when it starts to February 3rd, 2013. Javascript counts months from 0-11
var startTime = Math.floor(new Date(2013, 1, 3) / 1000);
var startNumber = 200000000;

var timer = setInterval(function() {
    var currentTime = Math.floor(new Date() / 1000);
    var secondsSinceStart = currentTime - startTime;

    el.innerHTML = Math.floor(startNumber + (secondsSinceStart / 2.7));
}, 2700);
它的工作方式是计算计数器启动后经过的秒数,并将其除以2.7以查看计数器的值。我使用
Math.floor()
使计数器中的数字是一个整数

Date.time()
). 
我把它除以1000,得到从纪元开始的秒数,然后我把它降到最低,这样这个数字就是一个整数

如果您需要任何帮助来理解其中的任何部分,请随时询问


演示:

如果您只担心计数器被保留给一个用户,那么这将起作用。如果您希望所有用户的计数器都相同,这将不起作用。@skimberk1:
+new Date()
?这应该在所有方面保持一致users@Eric. 在本地计算机/服务器上运行
new Date()
。现在,登录全球的服务器/计算机。运行
newdate()
。结果是否与此时的结果完全相同?如果这两台服务器不是在同一个完全同步的时区上运行的,它们就不一样了。@PenguinCoder他实际上必须把他的计算机带到世界各地,用这段代码来测试这一点。(或至少更改区域设置):@PenguinCoder:我假设
+new Date()
会给你从纪元算起的秒数,根据维基百科的说法,这是“从1970年1月1日星期四UTC 00:00:00以来经过的秒数”,我相信是
。*1/2.7
因为它是每2.7秒加1。@Matthew谢谢你,你说得对!我试着尽快写下答案:)现在更新了。直到我发布了我的答案,我才看到你的答案。我想伟人的想法是一样的以前从未见过这些-整洁!我在演示中看到了这一点,但在我将其添加到代码中时没有看到。我错过了哪一步?我想让它从startTime设置为的值开始,或者稍后再使用另一个近似值。创建新日期()时,其初始值是多少?为什么要除以1000?我的答案已经解释清楚了。new Date()
.getTime()
返回自Unix纪元以来的时间(以毫秒为单位)。除以1000可以得到毫秒到秒。我编辑了答案来回答你的问题。你应该改变startNumber的值来改变计数器的起始值。好的,酷。如何返回Unix纪元之后的时间(毫秒)?比如说,当公司开业并开始每2.7秒创建一次产品时?
newdate().getTime()
但是为什么需要毫秒?我们的两个答案都给你几秒钟,这是你需要的。
var el = document.getElementById('counter');
//Set the date of when it starts to February 3rd, 2013. Javascript counts months from 0-11
var startTime = Math.floor(new Date(2013, 1, 3) / 1000);
var startNumber = 200000000;

var timer = setInterval(function() {
    var currentTime = Math.floor(new Date() / 1000);
    var secondsSinceStart = currentTime - startTime;

    el.innerHTML = Math.floor(startNumber + (secondsSinceStart / 2.7));
}, 2700);