如MDN所示,由於實現差異,不鼓勵使用Date構造函數解析日期。
但是,如果您確實想這樣做,唯一的解決方案是確保您提供的輸入是一致的。這將確保(至少在單一環境中)輸出將保持一致。
有像2017-5-19
都工作:
function adjustDateString(str) {
return str.split('-').map(Number).join('-');
}
console.log(new Date(adjustDateString('2017-5-19')))
console.log(new Date(adjustDateString('2017-05-19')))
有像2017-05-19
都工作:
function padTo2Digits(str) {
return str.length >= 2 ? str : '0' + str;
}
function adjustDateString(str) {
return str.split('-').map(padTo2Digits).join('-');
}
console.log(new Date(adjustDateString('2017-5-19')))
console.log(new Date(adjustDateString('2017-05-19')))
編輯:但是,正如我上面指出的那樣,您可能會更好,因爲不使用字符串上的Date
構造函數。只是它拆分成它的值,並通過那些進入構造:
function parseDate(str) {
var parts = str.split('-').map(Number);
return new Date(parts[0], parts[1], parts[2]);
}
console.log(parseDate('2017-5-19'));
console.log(parseDate('2017-05-19'));
使用陣列deconstructuring語法(需要ES6 +):
function parseDate(str) {
let [year, month, day] = str.split('-').map(Number);
return new Date(year, month, day);
}
console.log(parseDate('2017-5-19'));
console.log(parseDate('2017-05-19'));
根據該現有的日期邏輯,似乎如果你違反它所期望的格式它不會將您的utc的值轉換爲您的本地時區。所以'2017-05-19'是正確的格式'yyyy-mm-dd'轉換爲您當地的時區。這有幫助嗎? –
@ PansulBhatt - 根據[* ECMA-262 *](http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date-time-string-format),日期爲格式YYYY-MM-DD應該被視爲UTC,而不是本地(當然,並非所有使用的瀏覽器都這樣做)。 – RobG