我正在编写一个应用程序,我需要在服务器端使用在 Windows Server 2008 上运行的 ColdFusion 8 获取纪元时间,在客户端使用 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", "January 1 1970 00:00", 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 - 纪元秒(将纪元转换为本地时间)
- 1367356994 - 纪元秒(将本地时间转换为 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", "January 1 1970 00:00", DateConvert("Local2utc", TheDate))# - Epoch seconds (convert local time to UTC)
</cfoutput>
关于javascript - 为什么 ColdFusion 纪元时间比 javascript 纪元时间晚一小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16309644/