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

У меня есть код следующего вида: 

```javascript
let getDateFormat = ((data = new Date(2001, 5, 5), separator = ".") => { 
    let days = data.getDate(); 
    let month = data.getMonth(); 
    let year = data.getFullYear(); 
    let str = '0'; 
    if (days < 10 && month < 10) { 
        data = str + days + str + month; 
    } 
    return days + separator + month + separator + year + separator; 
})

let newData = getDateFormat(); 
console.log('newDate', getDateFormat());
```

Мне нужно, чтобы формат даты был 05.05.2001. Как мне это исправить?
  • 27 ноября 2024 г. 12:03
Ответы на вопрос 2
Ваш код имеет несколько недостатков, которые не позволяют получить ожидаемый формат даты. Вот основные из них:

1. **Неправильное использование метода `getMonth()`**: Метод `getMonth()` возвращает месяцы в диапазоне от 0 до 11. Это значит, что январь — это 0, а декабрь — 11. Если вы хотите отображать месяц в привычном формате (с 1 до 12), вам нужно добавить 1 к значению, полученному от `getMonth()`.

2. **Форматирование чисел**: Вы всегда должны добавлять ведущий ноль к числам, если они меньше 10. В вашем коде это сделано только в случае, если день и месяц меньше 10, но это не дает нужного формата.

3. **Неправильное возвращение строки**: Ваша текущая реализация не форматирует дату правильно. Нужно использовать `String.prototype.padStart()` для добавления ведущих нулей.

Вот исправленный код:

```javascript
let getDateFormat = ((data = new Date(2001, 5, 5), separator = ".") => { 
    let days = data.getDate(); 
    let month = data.getMonth() + 1; // Добавьте 1 к месяцу
    let year = data.getFullYear(); 

    // Используем padStart для добавления ведущих нулей
    days = String(days).padStart(2, '0'); 
    month = String(month).padStart(2, '0'); 

    return days + separator + month + separator + year; 
});

let newData = getDateFormat(); 
console.log('newDate', newData); // Исправим на вывод правильной переменной
```

Теперь этот код будет корректно выводить дату в формате `05.06.2001`, поскольку месяц был увеличен на 1. Обратите внимание, что если вы хотите получить именно 05.05.2001, вам нужно будет поменять дату в конструкторе или задать другой объект `Date`.
В JS месяцы начинаются с 0, поэтому new Date (2001, 5, 5) — это июнь (06), это нужно учитывать. Кроме того, вы делаете проверку, если день меньше 10 и месяц меньше 10, при этом действие внутри блока бессмысленно — data далее не используется. 

Похожие вопросы