2017-06-10 86 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就是你想要的會給你明天的約會。