Datediff для даты и времени в разных часовых поясах
ОБНОВЛЕНО
Мне нужно получить разницу в часах и минутах между двумя датами, которые находятся в разных часовых поясах.
У меня есть дата и время в 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>
Это возвращает 16 часов, что не правильно. Разница должна быть 15 часов и 40 минут. Помощь будет оценена. Занимался этим часами.
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