почему даты не генерируются должным образом? - PullRequest
0 голосов
/ 04 марта 2019

Я использую функцию в Angular JS для генерации дат за последнюю неделю, начиная с сегодняшней даты.Я храню эти даты в массиве, а затем использую этот массив для заполнения выпадающего списка.Ниже приведен код, который используется мной.

generate() {
    this.date_new = [];
    var date = new Date();
    var date1 = new Date();
    for (var i = 0; i < 7; i++) {
        date.setDate(date1.getDate() - i);
        var a = date.toString();
        var str = this.convert(a);
        this.date_new.push(str);
    }
}

Здесь convert - это функция, которая используется для преобразования дат в требуемый формат.Снимок экрана сгенерированных дат прилагается ниже.

The generated dates

Как видно из скриншота, последние две даты неверны.Может кто-нибудь объяснить мне, в чем проблема?

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Проблема здесь в том, что в цикле используется та же самая переменная date.Вам необходимо выполнить его повторную инициализацию.

Как видно из раздела Значение параметра в ссылке здесь .Нулевые и отрицательные значения в setDate() устанавливают дату предыдущего месяца.

Следовательно, в setDate(0) значение даты установлено на последний день февраля. Теперь, когда вы используете ту же переменную, setDate(-1) берет предыдущий месяц с февраля, следовательно, вы получаете январь.

Вам нужно изменить код на что-то вроде этого:

generate() {
    this.date_new = [];
    var date1 = new Date();
    for (var i = 0; i < 7; i++) {
        // re-initialize date
        var date = new Date();
        date.setDate(date1.getDate() - i);
        var a = date.toString();
        var str = this.convert(a);
        this.date_new.push(str);
    }
}

Надеюсь, это поможет:)

0 голосов
/ 04 марта 2019

Проблема в том, что отрицательные числа внутри метода setDate работают не совсем хорошо.

Пожалуйста, обновите код до следующего вида:

this.date_new = [];
var date = new Date();
var date1 = new Date();
for (var i = 0; i < 7; i++) {
    date= new Date(date1.getFullYear(), date1.getMonth(),date1.getDate()-i);
    var a = date.toString();
    var str = this.convert(a);
    this.date_new.push(str);
}

Надеюсь, это решит вашу проблему.

0 голосов
/ 04 марта 2019

Метод setDate () устанавливает день объекта Date относительно начала текущего установленного месяца.

Значение выше MDN .

Ваш код работает для первых 5 дат, но как только вы изменяете свою февральскую дату с помощью -1, он устанавливает день относительно текущего месяца, например, февраля.Так что это превратится в январь (так как вы устанавливаете день на -1), то же самое произойдет на следующей итерации, и вы получите декабрь.

Для простого исправления вы можете просто установить переменную date в new Date() в первой строке вашего for цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...