2017-09-21 118 views
-1

僅使用JS編寫一個將用戶輸入日期格式化爲M/D/YYYY的函數,以便將其轉換爲API(YYYYMMDD)所需的格式。參數「userDate」和返回值是字符串。datetime不返回正確的值

例如,它應該將用戶輸入的日期「2014年12月31日」轉換爲適用於API的「20141231」。

我已經寫了:

function formatDate(userDate) { 
    // format from M/D/YYYY to YYYYMMDD 
    var myDate = new Date(userDate); 

    var day = myDate.getDay(); 
    var month = myDate.getMonth(); 
    var year = myDate.getFullYear(); 

    var d = day.toString(); 
    var m = month.toString(); 
    var y = year.toString(); 

return y + m + d; 
} 

console.log(formatDate("12/31/2014")); 

但這返回:2014113 它應該不是+1返回 '20141231'

感謝@ gurvinder372我能得到 '20141231' 但答案告訴我四0傳遞出的4 ...香港專業教育學院失敗了:

Example case: Wrong answer 
    Two-digit month and day: Wrong answer 
    One-digit day: Wrong answer 
    One-digit month: Wrong answer 
+0

當你已經有了固定的,試試「2014年1月1日」,在裏面找到你忘了做;) –

+0

和會是這樣呢? – John

回答

1

Date0進行計數,所以這樣的:

myDate.getMonth(); 

將返回0一月等等。

而且這樣的:

var day = myDate.getDay(); 

表示,一週中的一天從0計數,所以應該用這個來代替:

var day = myDate.getDate(); 

對於一位數的值,則需要檢查如果它小於10並有條件地將其與0相加。所以這最後的形式應該是:

function formatDate(userDate) { 
    // format from M/D/YYYY to YYYYMMDD 
    var myDate = new Date(userDate); 

    var day = myDate.getDate(); 
    var month = myDate.getMonth() + 1; 
    var year = myDate.getFullYear(); 

    var d = +day.toString() < 10 ? '0' + day.toString() : day.toString(); 
    var m = +month.toString() < 10 ? '0' + month.toString() : month.toString(); 
    var y = year.toString(); // no need for check one-digit values 

return y + m + d; 
} 
+0

感謝您的回覆,但您的答案只通過4個案例中的2個我仍然失敗一位數的日期:錯誤的答案和一次性答覆,數字月份:錯誤的答案...請參閱原始Q更新 – John

+0

查看更新的答案 –

+0

是的,已經通過了4滿分謝謝你的幫助S – John

0

但這返回:2014113它應該不會返回 '20141231'

月從0

開始更換

var month = myDate.getMonth(); 

var month = myDate.getMonth() + 1; 

如果您還需要採取護理單數字填充,然後做這個以及

function padToTwoChar(value) 
{ 
    return ("0" + value).slice(-2); 
} 

和您的return語句將成爲

return padToTwoChar(y) + padToTwoChar(m) + padToTwoChar(d); 
+0

好的謝謝你的幫助,但我不明白請看原文Q – John

+0

@John現在檢查更新的答案 – gurvinder372

0

希望這有助於你

function formatDate(userDate) { 
 
    var myDate = new Date(userDate); 
 

 
    var day = myDate.getDate(); 
 
    var month = myDate.getMonth() + 1; // +1 as month starts with o 
 
    var year = myDate.getFullYear(); 
 

 
    var d = (day <= 9) ? '0' + day : day.toString(); // append 0 for single digit 
 
    var m = (month <= 9) ? '0' + month : month.toString(); // append 0 for single digit 
 
    var y = year.toString(); 
 

 
    return y + m + d; 
 
} 
 

 
console.log(formatDate("1/1/2014"));

0

你甚至可以擺脫使用Date構造。通常不建議使用日期構造函數進行解析,除非您使用ISO-8601 format,因爲其他格式的瀏覽器的實現有所不同。

這裏是一個只有字符串split()函數的例子。

如果要爲零位填充數字,請使用格式爲1pad()函數作爲01

function formatDate(userDate) { 
 
    // format from M/D/YYYY to YYYYMMDD 
 
    var dateArray = userDate.split('/'); 
 
    var m = +dateArray[0]; 
 
    var d = +dateArray[1]; 
 
    var y = +dateArray[2]; 
 
    
 
    var pad = function(n){return n >= 10? n : '0'+n}; 
 
    // if you want zero padding 
 
    // return '' + pad(y) + pad(m) + pad(d); 
 

 
return '' + y + m + d; 
 
} 
 

 
console.log(formatDate("12/31/2014"));