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

一串slice()未按预期工作

  •  2
  • Gucci  · 技术社区  · 7 年前

    我正在使用 slice() 拆开弦,但它不能正常工作。

    串:

    var datept = "2018-01-19"
    var timept = "12:05"
    

    不相交:

    var month = datept.slice(5, -3); // should: "01" is: "01"
    var day = datept.slice(8, -0); // should: "19" is: ""    --  WRONG
    var year = datept.slice(0, -6); // should: "2018" is: "2018"
    var hours = timept.slice(0, -3); // should: "12" is: "12"
    var minutes = timept.slice(3, -0); // should: "05" is: "" -- WRONG
    

    还尝试了:

    var day = datept.slice(-8, -0); // or
    var day = datept.slice(8, -0);  // or
    var day = datept.slice(-8, 0);  // or
    var day = datept.slice(8, 0);
    

    Debugged Code

    4 回复  |  直到 7 年前
        1
  •  4
  •   Nina Scholz    7 年前

    您可以拆分日期并使用 destructuring assignment 对于值。

    var datept = "2018-01-19",
        timept = "12:05",
        [year, month, day] = datept.split('-'),
        [hours, minutes] = timept.split(':');
        
    console.log(year, month, day);
    console.log(hours, minutes);
        2
  •  2
  •   salezica    7 年前

    不使用 -0 . 我甚至不知道这是什么意思:) -0 只是 0 slice 会被 endIndex 低于 startIndex .

    在这里:

    var day = datept.slice(8, -0); // should: "19" is: ""    --  WRONG
    

    而是:

    var day = datept.slice(8); // should: "19" is: "19"
    

    无论如何,有更好的方法可以做到这一点。你可以操纵 Date 对象(尽管这些并不完全直观),或使用 split() 要获取片段,请执行以下操作:

    > var parts = "2018-01-19".split("-")
    > parts[0] // '2018'
    > parts[1] // '01'
    > parts[2] // '19'
    

    使用现代javascript,您甚至可以:

    > const [ year, month, day ] = "2018-01-19".split("-")
    > year  // '2018'
    > month // '01'
    > day   // '19'
    
        3
  •  1
  •   jan.q    7 年前

    为什么不使用字符串。拆分()?

    let str = "2018-01-19";
    let parts = str.split("-");
    let day = parts[2];
    let month = parts[1];
    let year = parts[0];
    
        4
  •  0
  •   Nicholas    7 年前

    这个解决方案简直太愚蠢了。你为什么不改成 Date 对象(本机)或甚至使用 moment (您必须导入它),然后在 helper 功能?

    let c = new Date("2018-01-19")
    c.getDate() // 19
    c.getMonth() + 1 // 0 (its from 0-11)
    

    和soo on。请参阅有关每个亮点的更多文档。