`
mooring
  • 浏览: 96060 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

只用js如何更有效的获取服务器时间

阅读更多

在实际的业务逻辑中,经常是与时间相关的,而前端能获得的时间有两个:客户端的时间,服务器的时间.

客户端时间通过 javascript中的Date对象可以获取,如

var dt = new Date();
var tm = dt.getTime();



那么tm就是客户端的时间,另外也可以通过对应的getFullYear(),getMonth(),getDate()取到对应的年月日等...
但这个时间可靠吗?

好吧,那取服务器时间吧
经常用到的是后台写一个php,jsp,cgi,asp...通过这些程序来返回一个时间,这是一种解决方案,但仅仅一个时间点,有必要用程序后台程序来实现吗?

那还有什么解决方案吗?
PS:在生成页面的时候把服务器时间就写在里边,然后就可以直接用了.但如果只是一个静态页面了呢,能这么干吗?

好吧,我在这里提出我的解决方案: Ajax HTTP Head

原理:
一般服务器在发送静态页面的时候(apache, nginx, lighttpd就目前所知)都是会在 HTTP 头里带一个Date的头信息的,那么我用Ajax直接取头信息里的Date不就OK了吗!8)

PS:但ajax发请求出去不是会有正文返回吗,那正文的内容比请求一次动态页面的代价可高多了,是这样的吗?8)

实现:

var xhr = new XMLHttpRequest();
if( !xhr ){
   xhr = new ActiveXObject("Microsoft.XMLHTTP");
}
xhr.open("HEAD",location.href,true);
xhr.onreadystatechange=function(){
    if( xhr.readyState == 4 && xhr.status == 200 ){
         alert(xhr.getResponseHeader("Date"));
    }
}
xhr.send(null);





解释:
常见的Ajax请求方法为GET,POST而这两种请求都可能会返回正文体,而发HEAD头则只会返回对应的头信息,不会有正文,且只要javascript可以执行,就可以取当前域的地址作为请求地址,有一定的通用性,且避免了跨域的问题.:lol:


实践:

以上代码的完整版在ie6,7,8,9,opera,chrome,firefox下测试通过


适用范围:

javascript正常执行的作用域是http/https下生效



其他:
服务器一定会返回Date头信息吗?
这个是RFC里要求服务器必须实现的,只有在101,103,500等几个状态码的情况下服务器才可以不返回Date头.但我们的location.href不在这个情况之列,所以只要当前javascript代码能正常执行(http方式),那么这个时间就可以取得到

定制的服务器不在本文讨论范围之内




转载请保留以下内容:
author:mooring
sites: http://mooring.iteye.com
date:2012/02/23

 

3
2
分享到:
评论
2 楼 mfkvfn 2012-03-01  
good work!
1 楼 haiyupeter 2012-02-23  
力顶,支持一个

相关推荐

    JavaScript Cookie显示用户上次访问的时间和次数

    如果是首次访问,则会提示用户输入名字,并通过 setCookie 函数将名字和当前时间存储在 Cookies 中。 此外,start 函数还调用了 count 函数来计算用户访问的次数。count 函数同样会检查名为 "counter" 的 Cookie,...

    纯js倒计时

    "纯js倒计时"是指利用JavaScript实现的一种计时功能,它能够显示从当前时间到设定日期之间的剩余时间,通常用于活动预告、节假日提醒等场景。这种倒计时的特点是不依赖于任何外部库或框架,只用JavaScript原生语法...

    js+html写的实现表格的动态增删改查和表单验证

    3. **AJAX技术**:在实际应用中,通常会结合使用AJAX(Asynchronous JavaScript and XML)技术,实现在不刷新页面的情况下与服务器进行数据交互。例如,当用户在表格中进行增删改操作时,JS可以通过AJAX发送HTTP请求...

    JS做的原生分页

    原生分页是指不依赖于任何第三方库或插件,只用纯JavaScript实现的分页功能。下面将详细探讨如何使用JS实现原生分页,以及涉及到的相关知识点。 首先,理解分页的基本原理至关重要。分页是用来解决大量数据展示问题...

    react js资源 渐进式包

    4. **babel.min.js**: Babel是一个广泛使用的JavaScript编译器,它的主要功能是将ES6+的新特性转换为当前浏览器普遍支持的JavaScript语法。这对于使用React.js尤其重要,因为React推荐使用JSX语法,这是一种ES6的...

    使用JS获取当前地理位置方法汇总

    今年的项目开发中,初步接触了移动端WEB开发,也就边学习HTML5边开发,主要使用了JQuery Mobile技术,发现这个不...我们这样做不都是为了赶时间,能够尽快将新功能发布嘛。  1.手机WEB定位方法: 代码如下: var getLo

    JavaScript中的小费计算器以及源代码.zip

    JavaScript中的小费计算器以及源代码 项目:JavaScript中的小费计算器和源代码 小费计算器是一个使用JavaScript、CSS和HTML开发的简单项目。这个项目很有趣。用户可以计算他们从一次支付的账单中可以得到的小费...

    轻松实现图片上传只用2kb大小不需要框架

    然后,通过JavaScript获取这个元素并添加事件监听器,当用户选择文件后触发: ```javascript const input = document.getElementById('imageUpload'); input.addEventListener('change', handleFileSelect, false);...

    JS文本框文本复制剪切代码.zip

    这段代码首先获取当前选中的文本,然后将其写入剪贴板。 3. **剪切文本** 剪切文本的操作与复制类似,但需要清除选中的文本。在现代浏览器中,我们可以结合`execCommand('cut')`和`navigator.clipboard.writeText...

    javascript计算当月剩余天数(天数计算器)示例代码

    通过getYear()方法获取当前年份,Y2K(千年虫)是一个历史问题,由于早期计算机编程中年份只用后两位表示,导致2000年的计算错误,因此这里进行了年份的修正,如果年份小于2000,则在前面补上1900。 变量month通过...

    纯JavaScript静态树型

    根据所提供的代码片段及描述,本文将深入探讨“纯JavaScript静态树型”(即不依赖任何框架或库,只用原生JavaScript实现的树形结构)的具体实现方式。 #### 二、关键概念与术语解释 1. **树形结构(Tree Structure)...

    js css 图片浏览

    【标题】"js css 图片浏览"所涉及的知识点主要集中在使用JavaScript(js)和CSS(层叠样式表)技术来实现一个图片浏览功能。这是一个常见的前端开发任务,旨在为用户提供一个直观且易于操作的图片查看体验。在这个...

    js实现日历组件,一行代码实现日历,并且实现可添加自定义记录

    首先获取当前日期,然后创建一个二维数组来表示日历网格,每个元素代表一天。 - **显示日历**:在HTML结构中填充这个数组,将日期值放入对应的单元格。 - **交互处理**:监听用户的点击事件,当用户选择一个日期并...

    javascript常用对象梳理

    例如,给当前的`myWin`窗口设置`status`属性时,可以只用`status`而不用`myWin.status`。 #### 三、Window对象的方法 `Window`对象提供了丰富的内置方法,用于控制浏览器窗口的行为。 - **1. `open()` 方法** ...

    JavaScript中动态向表格添加数据

    示例中的数据来源于模拟的JSON对象数组,实际应用中这些数据通常会从服务器获取,例如通过Ajax请求。一旦获取到数据,就可以使用类似的逻辑将其绑定到表格中。 8. **性能优化**: 虽然示例代码简单直观,但在大...

    JavaScript-30:香草JS挑战

    《JavaScript-30:香草JS挑战》是针对JavaScript初学者和进阶者的一个实践项目,旨在通过30个不同的小项目,让你深入理解和熟练掌握纯JavaScript(Vanilla JS)的精髓。在这个挑战中,你将不依赖任何库或框架,只用...

    Video-Website-Nodejs-MySQL:数据库分配-使用Electron(Node.js)和MySQL作为前端和后端来构建视频网站

    Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者使用JavaScript进行服务器端编程。Node.js以其事件驱动、非阻塞I/O模型而闻名,特别适合于构建数据密集型的实时应用,如视频流服务。 **2. MySQL...

    简单实现css轮播图

    // 获取下一张图片 let nextIndex = (slides.indexOf(activeSlide) + 1) % slides.length; let nextSlide = slides[nextIndex]; // 移除当前图片的active类 activeSlide.classList.remove('active'); // ...

    用jsp实现的购物车功能

    当用户点击“添加到购物车”按钮时,会触发一个AJAX请求或者表单提交,服务器接收到请求后,根据商品ID从数据库中获取商品信息,然后调用`ShoppingCart`的`addItem`方法。同样,用户想要移除商品时,`removeItem`...

    地图定位.zip微信小程序模板源码纯前端静态小程序源码

    它主要依赖于微信小程序的`wx.getLocation` API,这个API能够获取到用户的当前地理位置,包括经度、纬度和精确度等信息。同时,可能还会用到`wx.openLocation`来打开地图并显示特定位置,或者`wx.chooseLocation`让...

Global site tag (gtag.js) - Google Analytics