【问题标题】:How can I adjust this function to work with daylight savings?如何调整此功能以使用夏令时?
【发布时间】:2023-03-05 16:06:01
【问题描述】:

我正在使用这个例子来创建一个角度日历。但我今天意识到,当 DST 结束时,日期会重复,然后从那时起日子就差一天了。

看看堆栈闪电战。 11 月 7 日重复。 stackblitz link to calendar

这是生成日历日的代码。我该如何调整,以免 DST 搞砸一切?

  private getCalendarDays(date = new Date) {
var startDate;

startDate = this.getCalendarStartDay(date).getTime();


 const calendarStartTime =  startDate;
    return this.range(0, 41)
      .map(num => new Date(calendarStartTime + DAY_MS * num));
  }

  private getCalendarStartDay(date = new Date) {
    const [year, month] = [date.getFullYear(), date.getMonth()];
    const firstDayOfMonth = new Date(year, month, 1).getTime();

    return this.range(1,7)
      .map(num => new Date(firstDayOfMonth - DAY_MS * num))
      .find(dt => dt.getDay() === 0)
  }

  private range(start, end, length = end - start + 1) {
    return Array.from({ length }, (_, i) => start + i)
  }

【问题讨论】:

  • 我研究了 stackblitz,它运行良好
  • 怎么了?!
  • @skyBlue 在 StackBlitz 中,我看到数字 7 出现在周日和周一
  • 这有点通用,但我的冲动是循环一个整数列表来创建月份显示。获取当月的第一天找到第一天;加 1 个月,然后减去 1 天得到该月的最后一天。我不确定为什么需要时间进入这个等式来创建显示。正如您所了解的那样,您通过进行 ms 计算来获取日期列表这一事实是问题所在。由于夏令时,并非每天都有相同的毫秒数。
  • 使用每天的毫秒数添加天数(我假设 DAY_MS 表示)将在观察夏令时的地方导致错误,因为并非所有天都是 24 小时长。见How can I add 1 day to current date?

标签: javascript angular date calendar dst


【解决方案1】:

我不太确定,但我想你可以在上午 12 点得到日期以避免这个问题

  private getCalendarStartDay(date = new Date) {
    const [year, month] = [date.getFullYear(), date.getMonth()];

    //see that I indicate the 1 of the month at 12:00:00
    const firstDayOfMonth = new Date(year, month,1,12,0,0,0).getTime();

    //well the range from 0 to 6
    return this.range(0,6)
      .map(num => new Date(firstDayOfMonth - DAY_MS * num))
      .find(dt => dt.getDay() === 0)
  }

注意:我在 10 月收到了您的错误,而不是在 11 月

【讨论】:

  • new Date(year, month,1,12,0,0,0) 创建中午 (12:00:00) 的日期,通常(尽管错误地)表示为下午 12 点。上午 12 点通常用于午夜或 00:00。
猜你喜欢
  • 2014-10-18
  • 1970-01-01
  • 2011-11-05
  • 1970-01-01
  • 2014-05-06
  • 2013-05-19
  • 2019-11-20
  • 2015-07-14
  • 1970-01-01
相关资源
最近更新 更多