代码之家  ›  专栏  ›  技术社区  ›  Ole

Javascript日期。当时间组件设置为零时,getUTCDate()返回不同的数字?

  •  -1
  • Ole  · 技术社区  · 4 年前

    const d = new Date('2010-10-20');
    console.log(d.getUTCDate());
    

    控制台将记录日志 20

    const d = new Date('2010-10-20');
    d.setHours(0, 0, 0, 0);
    console.log(d.getUTCDate());
    

    然后 19

    这是正确的吗?我期待着 20

    This is a Stacblitz Demo

    getUTCDate() 将记录预期结果:

    const d3 = new Date('2000-10-20T00:00:00Z');
    console.log(`D3: ${d3.getUTCDate()}`);
    
    1 回复  |  直到 4 年前
        1
  •  1
  •   Jafar Jabr    4 年前

    这是因为您所在的时区与UTC之间存在差异, getUTCDate()将时间转换为UTC,然后获取日期。 尝试:

    const d = Date.UTC(2010, 10, 20, 0,0,0);
    console.log(new Date(d).getUTCDate());
    

    正如@jornsharpe在评论中指出的,真正的问题是 setHours setUTCHours 在构建日期调用。

    当您创建一个日期时,它将使用您的env中的时区创建,如果在env中设置,nodejs将从TZ中读取它。 您可以使用以下方法查找本地计算机上的时间与世界协调时间(UTC)之间的时间差(以分钟为单位):