Как изменить только день в заданной дате JS
Всем привет! Хочу изменить в переменной time только день, но меняется все, что перечислено в условиях до смены дня - год и месяц. Я неверно задаю условия? Может лучше использовать Switch? Помогите понять в чем дело.
function changeTime() {
var time = new Date("2005-09-07 13:45");
var year = time.getFullYear();
var month = time.getMonth()+1;
var day = time.getDate()
var hours = time.getHours()
var minutes = time.getMinutes();
return {
add: function(number, unit){
var plusYear = time.setYear(year+number);
var plusMonth = time.setMonth(month+number);
var plusDate = time.setDate(day+number);
var plusHours = time.setHours(hours+number);
var plusMinutes = time.setMinutes(minutes+number);
if (unit === "year"){return set(plusYear)}
else if(unit === "months"){return set(plusMonth)}
else if(unit === "days"){return set(plusDate)}
else if(unit === "hours"){return set(plusHours)}
else if(unit === "minutes"){return set(plusMinutes)}
function set(unitToChange){return new Date(unitToChange).toLocaleString()}
}
}
}
console.log(changeTime().add(2, "days")) // Ожидаю: "09.09.2005 13:45" --> Получаю: "09.12.2007, 13:45:00"
Ответы (1 шт):
Столько ошибок, что даже не знаю с чего начать.
Методы
Date.setXXX()модифицируют текущий объект. О том, что они что-то возвращают, документация умалчивает. Хотя вроде дляsetDate()написано, что он возвращает количество миллисекунд прошедших с эпохи Unix для новой датыЗачем вы увеличиваете на единицу месяц
var month = time.getMonth()+1;для меня загадка.
Итого, если метод add() должен модифицировать дату в объекте, а потом вернуть ее строковое представление, то код должен быть таким
function changeTime() {
var time = new Date("2005-09-07 13:45");
return {
add: function(number, unit) {
switch (unit) {
case "year":
time.setFullYear(time.getFullYear() + number);
break;
case "months":
time.setMonth(time.getMonth() + number);
break;
case "days":
time.setDate(time.getDate() + number);
break;
case "hours":
time.setHours(time.getHours() + number);
break;
case "minutes":
time.setMinutes(time.getMinutes() + number);
break;
}
return time.toLocaleString();
}
}
}
console.log(changeTime().add(2, "days"));
Если же внутренний объект изменяться не должен, то код должен быть таким
function changeTime() {
var time = new Date("2005-09-07 13:45");
return {
add: function(number, unit) {
const res = new Date(time);
switch (unit) {
case "year":
res.setFullYear(res.getFullYear() + number);
break;
case "months":
res.setMonth(res.getMonth() + number);
break;
case "days":
res.setDate(res.getDate() + number);
break;
case "hours":
res.setHours(res.getHours() + number);
break;
case "minutes":
res.setMinutes(res.getMinutes() + number);
break;
}
return res.toLocaleString();
}
}
}
console.log(changeTime().add(2, "days"));