string.slice()无法按预期工作

时间:2018-01-19 13:55:27

标签: javascript

我正在使用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 个答案:

答案 0 :(得分:4)

您可以拆分日期并使用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);




答案 1 :(得分:2)

不要使用-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' 来获取片段:

> const [ year, month, day ] = "2018-01-19".split("-")
> year  // '2018'
> month // '01'
> day   // '19'

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

<form 
  #myForm="ngForm"
  novalidate>
  <input 
    #myCtrl
    required
    type="input" 
    name="myCtrl" 
    id="myCtrl"
    [(ngModel)]="value">
</form>

答案 2 :(得分:1)

为什么不使用string.split()?

let str = "2018-01-19";
let parts = str.split("-");
let day = parts[2];
let month = parts[1];
let year = parts[0];

答案 3 :(得分:0)

这个解决方案简直就是愚蠢。为什么你不转换为Date对象(本机)甚至是moment(你必须导入它)然后在helper函数的帮助下得到你想要的东西?

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

和soo。请参阅有关重点的更多文档。