【问题标题】:Calculate flight time计算飞行时间
【发布时间】:2011-06-29 01:11:51
【问题描述】:

我现在正在研究一个计算飞行时间的函数。我有一个很奇怪的问题,因为它对我来说是一个新域。

这是一个例子:

向外: 25.02.2011 11:45 科隆 - 拉斯维加斯 26.02.2011 21:18

返回: 18.03.2011 09:49 拉斯维加斯 - 科隆 19.03.2011 11:05

对于这次飞行 Kayak 正在显示 外出:18:33 小时 返回:17:16 小时

科隆是格林威治标准时间 +01:00 拉斯维加斯是美国/洛杉矶时区 -> -08:00

但在示例中,去程航班的飞行持续时间是在拉斯维加斯的 -8 小时偏移量和返程航班的拉斯维加斯 -7 小时偏移量计算的。为什么?

我在这里看到了时区:http://download.geonames.org/export/dump/timeZones.txt

有人知道吗?

谢谢 尼克

【问题讨论】:

    标签: timezone


    【解决方案1】:

    这是因为夏令时并非在所有地方都在同一日期开始。

    Las Vegas: DST starts on Sunday, 13 March 2011
    Cologne: DST starts on Sunday, 27 March 2011

    因此,由于您的回程航班是 3 月 18 日,因此拉斯维加斯将在 DST,但科隆不会。

    【讨论】:

    • 嗨,谢谢,这是回答我的问题。如何在 PHP 中使用 date 函数实现这一点。当我构建时间戳时,拉斯维加斯将是 -8 小时: $time3 = strtotime('2011-03-18 09:49 -08:00');有没有可能启用夏令时?
    • @Nik:我根本不懂PHP,但是如果你想计算不同时区两次之间的差异,我建议先将它们都转换为UTC,即这样您就不必担心 DST 等。我假设有 PHP 函数可以做到这一点。
    • 是的,有一个函数 gmdate() 但结果是一样的。如果我得到拉斯维加斯的 -8 小时的 GMT 偏移量和科隆的 +1 小时的偏移量,那么计算是 16:16 小时返回而不是 17:16 :-(
    • 我想我找到了解决方案...我会在完成后发布该功能;-)
    【解决方案2】:

    好的,我解决了这个问题。感谢您建议先将两个日期转换为 UTC/GMT。

    这是诀窍:

    $reset_timezone = date_default_timezone_get();

    //第一次转换 date_default_timezone_set($timezone_identifier1); $time1 = $date_from。 '.$time_from; $gmtime1 = gmdate('Y-m-d H:i', strtotime($time1));

    //第二次转换 date_default_timezone_set($timezone_identifier2); $time2 = $date_to。 '.$time_to; $gmtime2 = gmdate('Y-m-d H:i', strtotime($time2));

    // 再次重置时区 date_default_timezone_set($reset_timezone);

    --> 这里计算差值

    希望它可以帮助其他人!

    干杯 尼克

    【讨论】:

    • 如果这是您问题的答案,请接受它(点击旁边的勾号),这样您的接受百分比就会提高,更多人会很乐意回答您的问题。接受你自己的答案是可以的(虽然你不会因此获得任何声誉)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    • 2019-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    相关资源
    最近更新 更多