gpt4 book ai didi

php - javascript错误地确定了夏令时线(2006年的示例)

转载 作者:可可西里 更新时间:2023-11-01 13:24:09 25 4
gpt4 key购买 nike

关于夏时制,我已经阅读了很多关于javascript new Date()对象的StackOverflow问题-就像它们被交叉时一样。但是,我还没有看到关于这个特定问题的答案,也没有找到一种方法来解决这个问题,同时仍然依靠“unix time”。
我个人选择通过将javascript日期作为日期传递给我的PHP代码而不是unix时间来解决此问题。然而,这个棘手的问题仍然存在!我已经在IE8,Chrome和FF上确认了此行为,因此我认为它的行为与您相同。 (更新: OSX用户可能无法生成此行为)
我的研究;与我的问题最接近的问题:

  • This user正在DST更改前后的特定时间工作。
  • This user担心时间的显示取决于用户的时区。该页面上可接受的答案提到getTimezoneOffset是“片状的”,这导致我没有对此进行深入研究。
  • 请参阅下面有关其他一些有深刻见解的问题的答案

  • 我已经在2006年11月1日左右生成了一个测试方案。根据您所在的时区,这可能会或可能不会相同。如果我正确理解javascript方面,则需要将PC时钟同步到

    Eastern Time (US & Canada) and check the 'Automatically adjust clock for Daylight Saving Time'.


    我将这个实验基于PHP的“印第安纳波利斯”时区。我的JavaScript结果是,当我找到2006年11月1日的unix时间时,它的 比PHP生成的少了一个小时(3600秒)。根据 this page(感谢Jon!),javascript是错误的。
    两种语言的结果 在2006年11月6日重新达成协议(protocol)!
    这项研究以及其他一些研究使我相信Javascript的历史记录是错误的,并且选择了错误的星期日将其从DST中“淘汰”-从而引起了我所看到的差异。
    我试图尽可能简化此操作,但仍有许多 Action 要进行。
  • Here is the PHP code and output,显示截至日期11/01/2006的正确毫秒数。
    date_default_timezone_set(“美国/印第安纳州/印第安纳波利斯”);
    echo“2006年11月1日的Unixtime是:” .strtotime(“11/01/2006”)。“\n”;
    echo“2006年11月6日的Unixtime是:” .strtotime(“11/06/2006”);

  • 结果是:
    Unixtime for November 1, 2006 is: 1162357200 (where the disagreement lies)
    Unixtime for November 6, 2006 is: 1162789200
    它们都基于GMT-0500。
  • 在Javascript中(请参阅我的jsfiddle **),我先依次调用new DategetTime()(并删除毫秒):
    新日期(“2006/11/01”)。getTime()/1000
    新日期(“2006/11/06”)。getTime()/1000

  • 这将产生值
    1162353600 <-- PHP outputs: 1162357200
    1162789200 <-- the same as PHP for '2006/11/06'; congruence is restored
    这与PHP的输出结果相差3600秒(对于2006/11/01),也就是一小时。在我的PHP应用程序中处理时,此值(提前一个小时)产生了前一天(2006/10/31),这是 Not Acceptable ,因为它中断了我的导航。 ( see more explanation of my particular scenario)
    使用Javascript输出:无需调用 Date("2006/11/01")getTime()可以清除一些奥秘,因为javascript可以显示它使用 GMT-0400的偏移量。
    我的 jsfiddle **实验(也在上面列出)显示了这些结果。
    **(您可能需要更改计算机的时区才能看到相同的行为)。
    可能起作用的是 according to Wikipedia 2006 was the first year that Indiana开始使用DST。无论如何,这都是一个好奇的难题。
    由于我已经制定了解决方案(避免在JavaScript中依赖Unix时间),因此我认为应该将其发布,以备后代之用,希望有人可能会知道如何更正javascript所显示的值(value)。
    问题是:如何将PHP和javascript之间的两个“unix time”结果对齐?我将不胜感激地学习DST的“路线”或一般情况。 (我目前假设是DST行)。
    更新:运行Chrome的iMac的生成了PHP生成的结果。什么???荒野。对此行为进行的任何JavaScript方面的修复都似乎是一项艰巨的任务(或至少很难做到)。也许这不是JavaScript问题,因为它会根据操作系统(或其他因素)生成正确的答案。
    值得注意的是,在此iMac上,我 并没有强制设置时区,而且我不确定这台Apple计算机是否会允许时区。选中了“自动设置日期和时间”( true)和 disabled的设置。时区设置为东部夏令时。未选中“自动设置时区”和 false框。
    我添加了 disabled标记以突出显示它在OSX中似乎不是问题。
    更新:根据网站 linked above,我验证了 all the following dates crossed into a new GMT offset on the appropriate dates (updated fiddle),这与2006年的回复相比有一周的时间。也就是说,在2007年11月4日,它是 Windows,在2007年11月5日,它返回了 GMT-4
  • 2007年3月11日,星期日,2:00 AM 11月4日,星期日,2:00 AM
  • 2008年3月9日,星期日,2:00 AM,11月2日,星期日,2:00 AM
  • 2009年3月8日,星期日,2:00 AM 11月1日,星期日,2:00 AM
  • 2010年3月14日,星期日,2:00 AM 11月7日,星期日,2:00 AM
  • 2011年3月13日,星期日,2:00 AM 11月6日,星期日,2:00 AM

  • 最后,如果您知道在2006年将此错误提交到Java所依赖的任何时区源的正确 channel ,请这样做,并让我知道。

    最佳答案

    首先,time in Indiana is very complicated

    但是在这种情况下,我认为Javascript是错误的。您的Javascript在我的计算机上的输出(已设置时区)在Chrome上为“Wed Nov 01 2006 00:00:00 GMT-0400(东部夏令时)”,在Chrome上为“Wed Nov 1 00:00:00 EDT 2006”在Internet Explorer上-但为daylight saving time ended in Indianapolis in 2006 on October 29th

    .NET的TimeZoneInfo类给出相同的结果:

    // Ignore the daft ID; it really means Eastern time
    var zone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
    var local = new DateTime(2006, 11, 1);
    Console.WriteLine(zone.GetUtcOffset(local));

    输出:
    -5:00:00

    (因此,它知道当时不是夏令时。)

    同样在Noda Time(我自己的日期和时间库,使用tzdb数据库)中:
    var zone = DateTimeZone.ForId("America/Indiana/Indianapolis");
    var instant = new Instant(1162357200 * NodaConstants.TicksPerSecond);
    var zoned = new ZonedDateTime(instant, zone);
    Console.WriteLine(zoned);

    结果:
    Local: 01/11/2006 00:00:00 Offset: -05 Zone: America/Indiana/Indianapolis

    关于php - javascript错误地确定了夏令时线(2006年的示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10522096/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com