javascript函数将当前时间(从历元)四舍五入到最接近的分钟

javascript函数将当前时间(从历元)四舍五入到最接近的分钟,javascript,php,datetime,Javascript,Php,Datetime,我一直在拼命想得到一个与这个php代码片段相当的JavaScript: <?php $id = 'uniqueID' $now = round(time()/60); $lock = md5($now . $id); ?> 使用来自的md5脚本 我只需要锁和钥匙来匹配。对我来说似乎很简单。我做错了什么?具体来说(我的评论有点滑稽): PHP是一种服务器端语言。当您的浏览器通过internet(甚至是本地计算机上的侦听端口)发出页面请求时,服务器(或本地计算机)上运行的apache

我一直在拼命想得到一个与这个php代码片段相当的JavaScript:

<?php
$id  = 'uniqueID'
$now = round(time()/60);
$lock = md5($now . $id);
?>
使用来自的md5脚本


我只需要锁和钥匙来匹配。对我来说似乎很简单。我做错了什么?

具体来说(我的评论有点滑稽):

PHP是一种服务器端语言。当您的浏览器通过internet(甚至是本地计算机上的侦听端口)发出页面请求时,服务器(或本地计算机)上运行的apache实例在页面上执行PHP,然后将其吐回浏览器

然后浏览器执行页面上的任何JavaScript,我们称之为客户端

因为您使用的是
Math.round
,如果从服务器执行PHP(服务器端)到浏览器开始执行相关Javascript(客户端)之间的时间间隔超过30秒,则以分钟为单位的时间将有所不同。使用
Math.floor
会给你59秒的回旋空间,但这仍然很危险,尤其是在手机上


即使假设页面在加载后立即执行JavaScript并快速加载,30秒的延迟也不是完全不可能的,在移动设备上也不是59秒。

如我前面所说,如果时间不匹配,它将不会创建相同的散列。在这种情况下,我要做的是找到一种方法,将时间从php传递到客户端,以便它们可以使用相同的精确时间

PHP方面:

<?php
    $id  = 'uniqueID';
    $now = round(time()/60);
    $lock = md5($now . $id);
    print $lock;
    setcookie("time",$now);
?>

客户端:

<script type="text/javascript">
    var timestamp = getCookie("time");
    var key = md5(timestamp + 'uniqueID');
    console.log(key);
</script>

var timestamp=getCookie(“时间”);
var key=md5(时间戳+uniqueID);
控制台日志(键);
  • 请注意,getCookie是一个快捷方式函数
  • 下面的示例以简单的形式展示了这个想法。我不会使用时间作为cookie的名称,也不会授予对vars(wrap-in函数)的访问权。丑陋的脚本在这样的情况下有很大的作用

没有意识到JavaScript和PHP不会同时运行?这会很好…如果PHP和JS计算的时间相同,它们就不会相同。$id的值是多少?我意识到可能(将)出现时间不匹配,这就是为什么我打开它一分钟的原因,这似乎足够让页面加载,等等。。。但是我把它打开了5分钟,10分钟,100分钟。。。这似乎仍然不起作用。@Joshp.23可能是字符串编码的不同。如果你的“uniqueID”是一个整数而不是一个字符串,它能工作吗?我试着改成整数,但没有工作。另外,我试图将$key和lock仅设置为md5($id),但没有成功。默认情况下,md5脚本编码为十六进制。
<script type="text/javascript">
    var timestamp = getCookie("time");
    var key = md5(timestamp + 'uniqueID');
    console.log(key);
</script>