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

Javascript日期,setFullYear更改时区

  •  0
  • Randy  · 技术社区  · 6 年前

    这就产生了这样一个问题:如果我有这个人的出生日期,并且想知道他今年的生日,我不能简单地使用 birthdate.setFullYear(2018) ,因为它将返回减去一小时的生日。这意味着它发生在实际生日的前一天,十一点钟。

    let test = new Date('1990-10-20');
    console.log(test);
    console.log(test.toISOString().substring(0, 10));
    
    // 1990-10-20 ( Sat Oct 20 1990 01:00:00 GMT+0100 (Central European Standard Time) )
    
    test.setFullYear(2000);
    console.log(test);
    console.log(test.toISOString().substring(0, 10));
    
    // 2000-10-19 ( Fri Oct 20 2000 01:00:00 GMT+0200 (Central European Summer Time) === one hour too soon!! )

    “1990-10-20T00:00:00.000Z”

    1990-10-20

    2000-10-19

    我找到的唯一解决方法是对日期进行子串处理,并将其替换为字符串值。如何使用Date对象做得更好?

    2 回复  |  直到 4 年前
        1
  •  2
  •   Ramiz Wachtler Claudio    6 年前

    setUTCFullYear(...) ( MDN Docs )相反呢?至少在那种情况下,不会把时间搞砸。

    let test = new Date('1990-10-20');
    console.log(test);
    console.log(test.toISOString().substring(0, 10));
    
    // "1990-10-20T00:00:00.000Z")
    
    test.setUTCFullYear(2000);
    console.log(test);
    console.log(test.toISOString().substring(0, 10));
    
    // "2000-10-20T00:00:00.000Z"
        2
  •  0
  •   bbsimonbb    6 年前

    BEWARE THE TIMEZONE

    var myDate = new Date(Date.UTC(2018,0,1)); // months are zero-indexed !
    

    然后指定UTC将其序列化。。。

    myDate.toISOString();
    myDate.toLocaleDateString("en",{timezone:"UTC"});