Datediff用于不同时区的日期时间

Mar*_*dom 1 coldfusion datediff gmt

更新

我需要获得不同时区的两个日期时间之间的小时和分钟差异.

我有MySQL中的日期时间,以及从GMT到MySQL的位置的偏移量.

我尝试过的:

<cfset departure = CreateDateTime(2017,01,27,21,00,00)> <!--- (this time zone is +2) --->
<cfset arrival = CreateDateTime(2017,01,28,06,40,00)> <!--- (this time zone is -5) --->
<cfset depart_timezone = 2>
<cfset arrive_timezone = -5>

<cfset difference = datediff("h",departure,arrival)><!--- get the difference in hours --->

<cfset timezonedif = depart_timezone - arrive_timezone><!--- get the difference between the time zones (answer should be 7)--->
<cfset duration = difference + timezonedif><!--- add the time zone difference to the flight difference --->

<cfoutput>          
(Duration: #duration# hours)<br>
</cfoutput> 
Run Code Online (Sandbox Code Playgroud)

这将返回16小时,这是不正确的.差异应该是15小时40分钟.帮助将不胜感激.在这几个小时.

hax*_*tbh 5

你正在以错误的顺序做事.

您需要获取正确的日期/时间 - 因此添加/删除时区差异

<cfset departure = CreateDateTime(2017,01,27,21,00,00)> <!--- (this time zone is +2) --->
<cfset arrival = CreateDateTime(2017,01,28,06,40,00)> <!--- (this time zone is -5) --->
<cfset depart_timezone = -2>
<cfset arrive_timezone = 5>

<cfset tzDeparture = DateAdd('h',depart_timezone,departure)>
<cfset tzArrival = DateAdd('h',arrive_timezone,arrival)>
Run Code Online (Sandbox Code Playgroud)

然后以分钟为单位获得总差异

<cfset difference = datediff("n",tzDeparture,tzArrival)>
Run Code Online (Sandbox Code Playgroud)

然后只需数学运算将分钟转换为小时和分钟

<cfoutput>    
    Duration Total Mins: #difference#<br>
    Duration Hours: #int(difference/60)#<br>
    Duration Mins: #difference MOD 60#<br>
</cfoutput>
Run Code Online (Sandbox Code Playgroud)

输出:

持续时间总分:1000

持续时间:16

持续时间分钟:40

你可以在这里看到一个例子:http://trycf.com/gist/26f5bce31db7787f4591317b7360ceb7/acf11?theme=monokai