JavaScript добавляет суффикс к сегодняшней дате

Я пытался заставить этот код работать, чтобы иметь дату и время, а также выводить суффикс даты, например, «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";
}

Любая помощь будет принята с благодарностью.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
133
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Просто используйте момент.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>

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

Ty H 04.07.2019 00:23
Ответ принят как подходящий

В вашем коде небольшая ошибка

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.

Ty H 04.07.2019 00:26

Хе-хе, да, я понял это после того, как опубликовал ответ. Я обновил его!

obscure 04.07.2019 00:27

Я сделал рекомендованное изменение, но я все еще получаю результат 33-го. Я заметил, что возвращаю август, поэтому исправил месяц +1 на +0, который теперь возвращает июль. Есть ли что-то еще, чего мне не хватает для дополнительных 3?

Ty H 04.07.2019 00:33

Возможно, где-то есть небольшая ошибка. Я добавил в свой ответ фрагмент рабочего кода, чтобы вы могли увидеть его в действии.

obscure 04.07.2019 00:35

Я вижу это, и да, ваш фрагмент также возвращает 33-е число. Это так близко, я пытаюсь определить причину.

Ty H 04.07.2019 00:36

Уч извини! Я не видел, чтобы у вас было несколько операторов return. Нужно убрать i + с каждого!

obscure 04.07.2019 00:38

Нет проблем, Ty H - рад, что смог помочь!

obscure 04.07.2019 00:41

Другие вопросы по теме