Я пытался заставить этот код работать, чтобы иметь дату и время, а также выводить суффикс даты, например, «3 июля». Я пытался заставить основную функцию даты попытаться вызвать функцию суффикса, но я продолжаю получать ошибку undefined на выходе. Извиняюсь, я уверен, что это что-то простое, что я пропустил, я все еще учусь всему этому.
Сценарий:
function todayDateTime() {
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var todayDate = new Date();
var getCurrentHours = todayDate.getHours();
var getCurrentMinutes = todayDate.getMinutes();
var getCurrentAmPm = getCurrentHours >= 12 ? 'PM' : 'AM';
var getTodayMonth = todayDate.getMonth()+1;
var getTodayDate = todayDate.getDate();
var addSuffix = getTodayDate.dateSuffix;
var getTodayFullYear = todayDate.getFullYear();
getCurrentHours = getCurrentHours % 12;
getCurrentHours = getCurrentHours ? getCurrentHours : 12;
getCurrentMinutes = getCurrentMinutes < 10 ? '0'+getCurrentMinutes :
getCurrentMinutes;
var getCurrentDateTime = getCurrentHours + ':' + getCurrentMinutes + ' ' +
getCurrentAmPm + '<br />' + monthNames[getTodayMonth] + ' ' + getTodayDate +
addSuffix + ' ' + getTodayFullYear;
return(getCurrentDateTime);
}
function dateSuffix(i) {
var j = i % 10,
k = i % 100;
if (j == 1 && k != 11) {
return i + "st";
}
if (j == 2 && k != 12) {
return i + "nd";
}
if (j == 3 && k != 13) {
return i + "rd";
}
return i + "th";
}
Любая помощь будет принята с благодарностью.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Просто используйте момент.js
console.info(moment('2019-07-04').format('MMMM do'));
console.info(moment('2019-07-03').format('MMMM do'));<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>В вашем коде небольшая ошибка
var addSuffix = getTodayDate.dateSuffix;
Здесь вы пытаетесь вызвать функцию/свойство .датаСуффикс для объекта getTodayDate.
getTodayDate на самом деле является переменной, содержащей день в виде целого числа. dateSuffix, с другой стороны, — это функция, которая ожидает параметр в круглых скобках.
Поэтому просто измените его на это:
var addSuffix = dateSuffix(getTodayDate);
Кроме того, следующая функция уже возвращает день в виде числа
var getCurrentDateTime = getCurrentHours + ':' + getCurrentMinutes + ' ' +
getCurrentAmPm + '<br />' + monthNames[getTodayMonth] + ' ' + getTodayDate +
addSuffix + ' ' + getTodayFullYear;
Поэтому вам не нужно возвращать его из функции dateSuffix.
Изменять
return i + "th";
к
return "th";
Вот рабочий пример:
function todayDateTime() {
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var todayDate = new Date();
var getCurrentHours = todayDate.getHours();
var getCurrentMinutes = todayDate.getMinutes();
var getCurrentAmPm = getCurrentHours >= 12 ? 'PM' : 'AM';
var getTodayMonth = todayDate.getMonth() + 1;
var getTodayDate = todayDate.getDate();
var addSuffix = dateSuffix(getTodayDate);
var getTodayFullYear = todayDate.getFullYear();
getCurrentHours = getCurrentHours % 12;
getCurrentHours = getCurrentHours ? getCurrentHours : 12;
getCurrentMinutes = getCurrentMinutes < 10 ? '0' + getCurrentMinutes :
getCurrentMinutes;
var getCurrentDateTime = getCurrentHours + ':' + getCurrentMinutes + ' ' +
getCurrentAmPm + '<br />' + monthNames[getTodayMonth] + ' ' + getTodayDate +
addSuffix + ' ' + getTodayFullYear;
return (getCurrentDateTime);
}
function dateSuffix(i) {
var j = i % 10,
k = i % 100;
if (j == 1 && k != 11) {
return "st";
}
if (j == 2 && k != 12) {
return "nd";
}
if (j == 3 && k != 13) {
return "rd";
}
return "th";
}
console.info(todayDateTime());Чувак, это круто, спасибо!, есть одна маленькая проблема, теперь он показывает суффикс, хотя теперь он говорит, что это 33 июля. Я не знаю, откуда он взял лишние 3.
Хе-хе, да, я понял это после того, как опубликовал ответ. Я обновил его!
Я сделал рекомендованное изменение, но я все еще получаю результат 33-го. Я заметил, что возвращаю август, поэтому исправил месяц +1 на +0, который теперь возвращает июль. Есть ли что-то еще, чего мне не хватает для дополнительных 3?
Возможно, где-то есть небольшая ошибка. Я добавил в свой ответ фрагмент рабочего кода, чтобы вы могли увидеть его в действии.
Я вижу это, и да, ваш фрагмент также возвращает 33-е число. Это так близко, я пытаюсь определить причину.
Уч извини! Я не видел, чтобы у вас было несколько операторов return. Нужно убрать i + с каждого!
Нет проблем, Ty H - рад, что смог помочь!
Я ценю эту идею, но я пытаюсь заставить страницу работать в автономном режиме и не нужно ссылаться на какой-либо другой источник, если это возможно. Я чувствую, что я довольно близок к своему сценарию, но чего-то не хватает.