代码之家  ›  专栏  ›  技术社区  ›  p.campbell

javascript-查找下次更改的日期(标准或日光)

  •  6
  • p.campbell  · 技术社区  · 15 年前

    这是一个及时的问题。北美时间变化的规则是:

    • 这个 十一月的第一个星期天 ,偏移更改为标准(-1小时)
    • 这个 三月的第二个星期天 ,偏移更改为日光(您与格林威治标准时间的正常偏移)

    考虑一个在javascript中接受日期参数的函数,它应该确定参数是标准的还是日光节约的。

    问题的根源是:

    • 您将如何构造下一次更改的日期?

    当前的算法/伪代码如下:

    if argDate == "March" 
    {
    
        var firstOfMonth = new Date();
        firstOfMonth.setFullYear(year,3,1);
    
        //the day of week (0=Sunday, 6 = Saturday)
        var firstOfMonthDayOfWeek = firstOfMonth.getDay();
    
        var firstSunday;
    
        if (firstOfMonthDayOfWeek != 0) //Sunday!
        {
            //need to find a way to determine which date is the second Sunday
        }
    
    }
    
    

    这里的约束是使用标准的javascript函数,而不是抓取任何javascript引擎对日期对象的解析。这段代码不会在浏览器中运行,因此这些好的解决方案将不适用。

    **并非北美的所有地方/地区都会发生变化。*

    2 回复  |  直到 11 年前
        1
  •  1
  •   csj    15 年前
    if argDate == "March" 
    {
    
        var firstOfMonth = new Date();
        firstOfMonth.setFullYear(year,3,1);
    
        //the day of week (0=Sunday, 6 = Saturday)
        var firstOfMonthDayOfWeek = firstOfMonth.getDay();
    
        var daysUntilFirstSunday =  (7-firstOfMonthDayOfWeek) % 7;
    
        var firstSunday = firstOfMonth.getDate() + daysUntilFirstSunday;
    
        // first Sunday now holds the desired day of the month
    }
    
        2
  •  0
  •   Community Egal    7 年前

    1)我希望在不同的国家可能有一些其他的规则。有些根本没有日光节约。因此,要在特定的区域中找到答案,您可能需要循环365(6)天才能找到 getTimetoneOffset() 改变它的价值。这在性能上不应该是很大的滞后。

    2)然后,您可以在时间变化时获得特定的时间(对于我们来说是凌晨2点?).建议24小时内再循环一次


    PS:好的, someone has already done the job =)。你应该在使用前测试它(因为我没有测试)

    你的第一个问题是 “夏令时是否适用于特定日期?” . This answer solves the task