Coldfusion 不同时区中datetime的Datediff

Coldfusion 不同时区中datetime的Datediff,coldfusion,datediff,gmt,Coldfusion,Datediff,Gmt,更新 我需要得到在不同时区的两个日期时间之间的小时和分钟差 我有MySQL中的日期时间,以及MySQL中位置相对于GMT的偏移量 我所尝试的: <cfset departure = CreateDateTime(2017,01,27,21,00,00)> <!--- (this time zone is +2) ---> <cfset arrival = CreateDateTime(2017,01,28,06,40,00)> <!--- (this t

更新

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

我有MySQL中的日期时间,以及MySQL中位置相对于GMT的偏移量

我所尝试的:

<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> 

(持续时间:#持续时间#小时)

这返回16小时,这是不正确的。差值应为15小时40分钟。我们将不胜感激。你已经这样做了好几个小时了。

你在按错误的顺序做事

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

<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)>

然后得到以分钟为单位的总差值

<cfset difference = datediff("n",tzDeparture,tzArrival)>

然后做数学运算,把分钟转换成小时和分钟

<cfoutput>    
    Duration Total Mins: #difference#<br>
    Duration Hours: #int(difference/60)#<br>
    Duration Mins: #difference MOD 60#<br>
</cfoutput>

持续时间总分钟数:#差异#
持续时间:#int(差/60)#
持续时间分钟:#差模60#
输出:

持续时间总计分钟:1000

持续时间:16小时

持续时间:40分钟


你可以在这里看到一个例子:

你按错误的顺序做事

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

<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)>

然后得到以分钟为单位的总差值

<cfset difference = datediff("n",tzDeparture,tzArrival)>

然后做数学运算,把分钟转换成小时和分钟

<cfoutput>    
    Duration Total Mins: #difference#<br>
    Duration Hours: #int(difference/60)#<br>
    Duration Mins: #difference MOD 60#<br>
</cfoutput>

持续时间总分钟数:#差异#
持续时间:#int(差/60)#
持续时间分钟:#差模60#
输出:

持续时间总计分钟:1000

持续时间:16小时

持续时间:40分钟


您可以在这里看到一个示例:

这是正确的。您提供的时间相差9小时。datediff在使用“h”时不会给出分钟数,因为它只检查小时数。如果要考虑时区,则需要计算实际时间,然后获得差值。无法猜测这些区域是不同的。首先,将时区添加到时间中,然后传递它。或DateConvert()转换为utc并传递它。更新了我的问题并尝试了DateAdd,但仍然没有得到正确的结果。我在上一篇评论中提到了未返回分钟数的原因。使用“h”只返回向上或向下取整的小时数。所以16还是正确的。您需要使用分或秒来确定差异日期,并计算出总时间的小时数和分钟数。标准的分时转换,快把我逼疯了。如何显示DateDiff中的小时和分钟<代码>这不符合预期。(编辑)我在MySQL中有datetime,MySQL中位置的GMT不完全符合这一点。您的意思是将所有日期和时间值存储在GMT/UTC中,并将两个时区的偏移量存储在单独的列中?RE:差应该是15小时,为什么你认为应该是15小时?没错。您提供的时间相差9小时。datediff在使用“h”时不会给出分钟数,因为它只检查小时数。如果要考虑时区,则需要计算实际时间,然后获得差值。无法猜测这些区域是不同的。首先,将时区添加到时间中,然后传递它。或DateConvert()转换为utc并传递它。更新了我的问题并尝试了DateAdd,但仍然没有得到正确的结果。我在上一篇评论中提到了未返回分钟数的原因。使用“h”只返回向上或向下取整的小时数。所以16还是正确的。您需要使用分或秒来确定差异日期,并计算出总时间的小时数和分钟数。标准的分时转换,快把我逼疯了。如何显示DateDiff中的小时和分钟<代码>这不符合预期。(编辑)我在MySQL中有datetime,MySQL中位置的GMT不完全符合这一点。您的意思是将所有日期和时间值存储在GMT/UTC中,并将两个时区的偏移量存储在单独的列中?RE:差应该是15个小时,为什么你认为应该是15个小时?你做事的顺序不对。如果这两个值都存储在UTC中,则两种方法都可以。只需获取原始值的dateDiff。然后加上时区偏移量(虽然都是以分钟为单位,而不是以小时为单位)。如果这两个值都存储在UTC中,则两种方法都可以。只需获取原始值的dateDiff。然后添加时区偏移量(尽管都是以分钟为单位,而不是以小时为单位)。