2017-06-10 85 views
1

我有一个使用HTML,CSS和jQuery的静态应用程序。我现在将其导入到角2,我的日期越来越问题:移动到手稿,与数字错误

// GET DATE 

let d = new Date(); 
let day = d.getDay() + 1; 
let date = d.getDate() + 1; 
let datePostFix; 

// POST FIX DATE ST ND RD TH 

if (date == 1 || date == 21 || date == 31 && date !== 11) { 
    let datePostFix = "st" 
} else if (date === 2 || date === 22 && date !== 12) { 
    let datePostFix = "nd" 
} else if (date === 3 || date === 23 && date !== 13) { 
    let datePostFix = "rd" 
} else { 
    let datePostFix = "th" 
} 

基本上每个if语句错误出在什么==!我得到的错误是[ts]运算符'!=='不能应用于类型'31'和'11',但我不明白它的一个数字。

任何帮助表示赞赏。

谢谢!

+2

你能解释一下你为什么这么做吗?显然'日期!== 11',如果它是'1 | 21 | 31' –

+0

至少检查11,12和13的不平等是毫无意义的,只适用于最后一部分。如果数字为31,则数字不得为11. –

+0

此外,我认为重新定义let datePostFix与您所做的不同,并不是您想要的,因为您已将它定义为未初始化。您可以在if块中使用var或跳过关键字。 – sinewave440hz

回答

2

Typescript正试图让您免于编写无效的代码。当它到达date !== 11部分时,它知道date必须是1,21或31(因此date的类型为1 | 21 | 31,这是一个联合类型 - 请参阅Advanced Types)。它知道,没有这些数字都不可能等于11,所以它试图告诉你,你不应该,如果你删除!==比较比较11

,代码的行为如出一辙:

if (date == 1 || date == 21 || date == 31) { 
    let datePostFix = "st" 
} else if (date === 2 || date === 22) { 
    let datePostFix = "nd" 
} else if (date === 3 || date === 23) { 
    let datePostFix = "rd" 
} else { 
    let datePostFix = "th" 
} 

编辑:as @missingmanual指出,d.getDate() + 1几乎肯定不是你想要的。在大多数情况下,这会给你明天的日期(因为getDate()已经返回1-31的数字形式)。在某些情况下,甚至可以给你一个无效的日期(例如,如果今天是31号,你会得到32)

+0

为此欢呼。是的,这确实很有意义。 – devon93

2

我觉得这是你想要做什么:

// GET DATE 

let d = new Date(); 
let day = d.getDay() + 1; 
let date = d.getDate() + 1; 
let datePostFix: string; 

// POST FIX DATE ST ND RD TH 

if (date == 1 || date == 21 || date == 31) { 
    datePostFix = "st" 
} else if (date === 2 || date === 22) { 
    datePostFix = "nd" 
} else if (date === 3 || date === 23) { 
    datePostFix = "rd" 
} else { 
    datePostFix = "th" 
} 

首先让datePostFix是足够,并且没有必要检查它不是11,12或13,正如其他人提到的那样,你已经检查过它是31,22或23. 也不确定是否将getDate加1就是你想要的会给你明天的约会。