【问题标题】:Datediff for datetime in different time zones不同时区中日期时间的 Datediff
【发布时间】:2017-07-16 04:47:36
【问题描述】:

更新

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

我有 MySQL 中的日期时间,以及 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> 

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

【问题讨论】:

  • 没错。您提供的这些时间之间的差异是 9 小时。当您使用 'h' 时,datediff 不会给您分钟,因为它只检查小时。如果你想考虑时区,那么你需要计算实际时间然后得到差异。它无法猜测这些是不同的区域。开始将 dateAdd() 时区到时间,然后传递它。或将 DateConvert() 转换为 utc 并传递它。
  • 更新了我的问题并尝试了 DateAdd,但仍然没有得到正确的结果。
  • 我在上一条评论中提到了为什么不返回分钟数。使用“h”只会返回向上或向下舍入的小时数。所以 16 又是正确的。您将需要使用分钟或秒来计算 diff 日期,并从该总数中计算出多少小时和分钟。标准分钟到小时的转换。
  • 快把我逼疯了。如何显示 DateDiff 的小时和分钟? &lt;cfset departure = CreateDateTime(2017,01,27,21,00,00)&gt; &lt;!--- (this time zone is +2) ---&gt; &lt;cfset arrival = CreateDateTime(2017,01,28,06,40,00)&gt; &lt;!--- (this time zone is -5) ---&gt; &lt;cfset differencehours = DateDiff("H",departure,arrival)&gt; &lt;cfset differenceminutes = DateDiff("n",departure,arrival)&gt; 这没有按预期工作。
  • (编辑)我有 MySQL 中的日期时间和 MySQL 中位置的 GMT 不要完全遵循。您的意思是您将所有日期和时间值存储在 GMT/UTC 中,加上两个时区的偏移量在不同的列中? RE:应该是 15 小时的差异 为什么你认为应该是 15 小时?

标签: coldfusion datediff gmt


【解决方案1】:

你做事的顺序不对。

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

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

输出:

持续时间总分钟数:1000

持续时间:16

持续时间分钟:40

您可以在此处查看示例:http://trycf.com/gist/26f5bce31db7787f4591317b7360ceb7/acf11?theme=monokai

【讨论】:

  • 您的操作顺序错误。 如果两个值都以 UTC 格式存储,则任何一种方式都可以。只需取原始值的 dateDiff 即可。然后添加时区偏移量(尽管都以分钟为单位,而不是小时)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-22
  • 2018-01-23
  • 1970-01-01
  • 2016-08-16
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多