我有這個字符串29/06/2017
我想將其轉換爲JavaScript日期並向其添加一年結果應爲28/06/2018
如何執行此操作。我試過如何將字符串轉換爲日期並在javascript中添加一年到該日期
var MyDate = new Date('29/06/2017');
輸出爲invalid date object
如何轉換並添加一年。
我有這個字符串29/06/2017
我想將其轉換爲JavaScript日期並向其添加一年結果應爲28/06/2018
如何執行此操作。我試過如何將字符串轉換爲日期並在javascript中添加一年到該日期
var MyDate = new Date('29/06/2017');
輸出爲invalid date object
如何轉換並添加一年。
你可以嘗試切換天和一年
var date = new Date('29/06/2017'.split('/').reverse().join('/'));
var plusOneYear = date.setFullYear(date.getFullYear()+1);
console.log(date); // output: Fri Jun 29 2018 00:00:00
console.log(new Date(plusOneYear)); // output: Fri Jun 29 2018 00:00:00
console.log(date.toLocaleDateString()) // output: 6/29/2018
console.log(date.getDate() + '/' + (date.getMonth+1) + '/' + date.getFullYear()); // output: 29/6/2018
另一種方式是
var date = '29/06/2017'.split('/'); // will become [day][month][year]
var newDate = date[2] + '/' + date[1] + '/' + date[0]; // join in format you would prefer
var plusOneYear = newDate.setFullYear(newDate.getFullYear()+1);
console.log(new Date(plusOneYear));
console.log(newDate.toLocaleDateString()) // output: 6/29/2018
編輯
謝謝你的工作,但我怎麼才能添加一年到那個日期,並再次將其格式化爲這個合成夥伴28/06/2018 – bharathRaj
我已經編輯我的asnwer –
謝謝你的工作 – bharathRaj
試試這個,
var MyDate = new Date('29/06/2017'.split('/').reverse().join('/'));
new Date(MyDate.setYear(MyDate.getFullYear() + 1));
謝謝你的工作,但是最後是這個星期五Jun 29 2018 00:00:00 GMT + 0530(印度標準時間)我需要它是29/06/2018 – bharathRaj
@bharathRaj你可以使用Moment.js格式化字符串。就像路易斯在他的回答中提到的 –
不像其他用戶,我想要你知道解決這個問題的另一種方法。
Moment.js
有什麼目的?
該庫在Javascript Developer中非常流行,因爲它很容易實現,並允許您使用提供的內置功能更容易地操作Date方法。
另外,使用這個庫解決的另一個有趣的問題是國際化。
國際和日期
正如你可能知道,每一種語言都有它自己的方式來處理和寫入日期。 (翻譯月份,不同顯示等)。
Moment.js提供了一套完整的功能,可以讓您輕鬆處理預翻譯的單詞和句法。
如何使用Moment.js解決您的問題
var myDate = moment("29/06/2017", "MM/DD/YYYY");
此外,您可以檢查您的日期是有效的
myDate.isValid();
在這裏,你可以簡單地每年通過補充:
myDate.add(1, 'y'); // Which stands for add a year
謝謝你的建議,我會看到它一次 – bharathRaj
這是兩個問題之一。解析部分由Why does Date.parse give incorrect results回答。一旦你有一個日期,增加一年是直截了當的,但你需要考慮增加一年到2月29日,這將返回3月1日(因爲將不會有一個29年2月29日)。
// Simple parser for DD/MM/YYYY
function parseDMY(s) {
var b = s.split(/\D/);
return new Date(b[2], b[1]-1, b[0]);
}
// Simple formatter: Date to DD/MM/YYYY
function formatDMY(d) {
return ('0' + d.getDate()).slice(-2) + '/' +
('0' + (d.getMonth()+1)).slice(-2) + '/' +
d.getFullYear();
}
// Add year to a Date
function addYear(d) {
var date = d.getDate();
d.setFullYear(d.getFullYear() + 1);
// Test if 29 Feb rolled over to 1 Mar
if (date != d.getDate()) {
d.setDate(d.getDate() - 1);
}
return d;
}
// Tests (minimal)
['29/02/2016','29/6/2017'].forEach(function(s){
var date = parseDMY(s);
addYear(date);
console.log(formatDMY(date));
});
如果你想前一天(如30/06/2016 - > 29/06/2017),那麼你需要添加的一年,這是相同的後減去一天因爲這行:
d.setDate(d.getDate() - 1);
,或者你可以修改addYear功能來爲你做它。
你有沒有想過在2月29日閏年運行這個特殊情況? – kamoroso94