JS怎么获取当前网络时间,不发起请求。

简_洋 2020-10-14 03:22:39
最近想有个需求让JS获取网络时间,但是因为使用频率有点高。所以能不能不发起请求,就能获得当前的网络时间。
...全文
2579 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
测试狂人 2020-11-05
  • 打赏
  • 举报
回复
引用 7 楼 Chappell_ycp 的回复:
[quote=引用 3 楼 X-i-n 的回复:]又要不发请求,又要获取“网络”时间。你再想想。
让你看看我领导的话。简直是气炸! [/quote] 获取本地时间需要请求?本地电脑上的时间
//     /* 获取当前时间*/
//     var obj=new Date();
//     var year=obj.getFullYear();
//     var month=obj.getMonth();
//     var day=obj.getDay();
//     var hour=obj.getHours();
//     var minute=obj.getMinutes();
//     var second=obj.getSeconds();
//     time = (year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second)
//     console.log("time:"+time);
简_洋 2020-11-05
  • 打赏
  • 举报
回复
引用 15 楼 快乐起航2020 的回复:
能获取服务器端的时间吧!把格式转换一下就可以
目前是请求接口对比本地时间,然后存储差值,每次用的时候加上差值。
简_洋 2020-11-05
  • 打赏
  • 举报
回复
获取本地时间需要请求?本地电脑上的时间
//     /* 获取当前时间*/
//     var obj=new Date();
//     var year=obj.getFullYear();
//     var month=obj.getMonth();
//     var day=obj.getDay();
//     var hour=obj.getHours();
//     var minute=obj.getMinutes();
//     var second=obj.getSeconds();
//     time = (year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second)
//     console.log("time:"+time);
[/quote] 大哥我要获取网络时间不是本地时间,每次发请求有点频繁,就想问问有没有简单的方法,
简_洋 2020-11-05
  • 打赏
  • 举报
回复
引用 14 楼 泡泡鱼_ 的回复:
封装你的ajax请求。初始化时判断,比如:window.SERVERTIME是否存在,如果已经存在,就直接应用;否则向一个指定的接口获取一次;接口返回一个时间戳就行了 这种需求,我自己只在服务器端统一处理请求的有效时间时使用过;因为要考虑到用户终端与服务器端存在的时间差,所以才需要在用户终端获取一次服务器时间,然后请算差值,在封装好的ajax中每次请求自动带上这个;

const _ts: number = new Date().getTime() + parseInt(window.___TIMESPAN___ || 0);
请求成功后

if(res.___SERVETIME___) {
          //计算并存储当前用户终端与服务器之间的时间差
          window.___TIMESPAN___ = res.___SERVETIME___ - new Date().getTime();
        }
单页面应用直接window上挂载即可,多页面的话,你可以考虑使用sessionStorage或localStorage的方法去存储这个值
嗯最后让后台写了个接口,然后看一下差值超过120秒就把差值存储起来项目跑起来的时候请求一次就够了。
快乐起航2020 2020-10-23
  • 打赏
  • 举报
回复
能获取服务器端的时间吧!把格式转换一下就可以
泡泡鱼_ 2020-10-23
  • 打赏
  • 举报
回复
封装你的ajax请求。初始化时判断,比如:window.SERVERTIME是否存在,如果已经存在,就直接应用;否则向一个指定的接口获取一次;接口返回一个时间戳就行了 这种需求,我自己只在服务器端统一处理请求的有效时间时使用过;因为要考虑到用户终端与服务器端存在的时间差,所以才需要在用户终端获取一次服务器时间,然后请算差值,在封装好的ajax中每次请求自动带上这个;

const _ts: number = new Date().getTime() + parseInt(window.___TIMESPAN___ || 0);
请求成功后

if(res.___SERVETIME___) {
          //计算并存储当前用户终端与服务器之间的时间差
          window.___TIMESPAN___ = res.___SERVETIME___ - new Date().getTime();
        }
单页面应用直接window上挂载即可,多页面的话,你可以考虑使用sessionStorage或localStorage的方法去存储这个值
m0_46772100 2020-10-16
  • 打赏
  • 举报
回复
performance.now() 不知道这个东西行不行,希望有帮助,https://developer.mozilla.org/zh-CN/docs/Web/API/Performance/now
简_洋 2020-10-14
  • 打赏
  • 举报
回复
引用 9 楼 a76326791212 的回复:
[quote=引用 5 楼 Chappell_ycp 的回复:][quote=引用 1 楼 a76326791212 的回复:]你说的网络时间是指?
就是指,标准的北京时间不是你自己电脑上的时间。[/quote] 如果是标准的北京时间那 new Date().toLocaleString('en-US', { timeZone: 'Asia/Shanghai' }) 就好了。 PS: 你们后端为什么不用时间戳处理?[/quote] 还是不行,我把电脑时间改了他还是获取的电脑时间,。只不过是改了一下时区。时间还是电脑时间。
简_洋 2020-10-14
  • 打赏
  • 举报
回复
引用 8 楼 天际的海浪 的回复:
你可以一开始发请求获取一次网络时间,用客户端时间的时间戳与网络时间的时间戳相减,得到一个时间差值。 之后只要用客户端时间的时间戳加上这个时间差值,就是网络时间了。
这个方法很不错,但是我用的话,领导会说不行,说我投机取巧。所以啥也不说了就给他一个一个的去请求。页面慢点就慢点,没办法。
baycoder1 2020-10-14
  • 打赏
  • 举报
回复
引用 5 楼 Chappell_ycp 的回复:
[quote=引用 1 楼 a76326791212 的回复:]你说的网络时间是指?
就是指,标准的北京时间不是你自己电脑上的时间。[/quote] 如果是标准的北京时间那 new Date().toLocaleString('en-US', { timeZone: 'Asia/Shanghai' }) 就好了。 PS: 你们后端为什么不用时间戳处理?
天际的海浪 2020-10-14
  • 打赏
  • 举报
回复
你可以一开始发请求获取一次网络时间,用客户端时间的时间戳与网络时间的时间戳相减,得到一个时间差值。 之后只要用客户端时间的时间戳加上这个时间差值,就是网络时间了。
简_洋 2020-10-14
  • 打赏
  • 举报
回复
引用 4 楼 zc_1994 的回复:
你可以页面加载的时候获取一次,然后前端setInterval, 这样只会调一次请求
这样也是一个方法,但是不是一个页面在用,很多个页面在用。而且频率极高,每次请求接口都要带上!
简_洋 2020-10-14
  • 打赏
  • 举报
回复
引用 1 楼 a76326791212 的回复:
你说的网络时间是指?
就是指,标准的北京时间不是你自己电脑上的时间。
zc_1994 2020-10-14
  • 打赏
  • 举报
回复
你可以页面加载的时候获取一次,然后前端setInterval, 这样只会调一次请求
X-i-n 2020-10-14
  • 打赏
  • 举报
回复
又要不发请求,又要获取“网络”时间。你再想想。
简_洋 2020-10-14
  • 打赏
  • 举报
回复
是不是不发请求,就获取不到??
baycoder1 2020-10-14
  • 打赏
  • 举报
回复
你说的网络时间是指?

87,996

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧