我正在编写一个应用程序,我需要在服务器端使用ColdFusion 8在
Windows Server 2008和客户端上使用javascript(在Google Chrome中进行测试)来获取时代.问题是,ColdFusion生成的时代时间比javascript生成的时间晚了一个小时.我已经验证了客户端和服务器端的日期/时间设置是否正确.
这是我如何设置ColdFusion的时间戳:
<cfset cfEpoch = DateDiff("s","January 1 1970 00:00",DateConvert("Local2utc",now()))>
这是我如何使用javascript设置它:
var jsEpoch = Math.round(new Date().getTime()/1000.0);
这个JavaScript时代与本网站(http://www.epochconverter.com/)的匹配是有道理的,因为它们使用的方法与我一样. ColdFusion时代背后一个小时.这是我试图排序的运行方式:
<cfset localDate = now()> <cfset utcDate = DateConvert("Local2utc",localDate)> <cfset epoch = DateDiff("s",utcDate)> <cfoutput> Local Date: #localDate# <br> UTC Date: #utcDate# <br> Epoch: #epoch# </cfoutput>
Local Date: {ts '2013-04-30 17:44:56'} UTC Date: {ts '2013-04-30 21:44:56'} Epoch: 1367354696
所以我很失落本地日期和UTC日期值都是正确的.看来,唯一的解释是DateDiff()函数不能正常工作,但我已经测试了其他日期,似乎工作正常.我想我可以添加3600到它产生的时代价值,但我宁愿不这样做,而不知道为什么我得到一个错误的价值在第一位.有没有人看到我在这里失踪?
解决方法
写一个小脚本你可能会注意到一些非常奇怪的东西.
这是为我输出的.
> 1367360584 – Javascript的时间
> 1367360594 – Epoch秒(将Epoch转换为当地时间)
> 1367356994 – Epoch秒(将当地时间转换为UTC)
所以把时代转变成当地的时代就是现在,但是另一方面却不是.
这也是在CF8上运行的,所以如果将Epoch转换为当地时间,它似乎是正确的.
试试看.
<script> var jsEpoch = Math.round(new Date().getTime()/1000.0); document.write(jsEpoch + ' - Javascript time <br>'); </script> <cfset TheDate = now()> <cfoutput> #DateDiff("s",DateConvert("utc2Local","January 1 1970 00:00"),TheDate)# - Epoch seconds (convert Epoch to local time)<br> #DateDiff("s",TheDate))# - Epoch seconds (convert local time to UTC) </cfoutput>