Как узнать день недели и месяц года?

124

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

Задача

Я хочу получить дату в формате ниже:

Напечатано 27 января 2011 г. в 17:42:21.

Пока что получил следующее:

var now = new Date();
var h = now.getHours();
var m = now.getMinutes();
var s = now.getSeconds();

h = checkTime(h);
m = checkTime(m);
s = checkTime(s);

var prnDt = "Printed on Thursday, " + now.getDate() + " January " + now.getFullYear() + " at " + h + ":" + m + ":" s;

Теперь мне нужно знать, как получить день недели и месяц года (их названия).

Есть ли простой способ сделать это, или я должен рассмотреть возможность использования массивов, где я бы просто индексировал правильное значение, используя now.getMonth()и now.getDay()?

Уилл Маркуллер
источник

Ответы:

233

Да, вам понадобятся массивы.

var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];
var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

var day = days[ now.getDay() ];
var month = months[ now.getMonth() ];

Или вы можете использовать библиотеку date.js.


РЕДАКТИРОВАТЬ:

Если вы собираетесь использовать их часто, вы можете расширить Date.prototypeдля доступности.

(function() {
    var days = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'];

    var months = ['January','February','March','April','May','June','July','August','September','October','November','December'];

    Date.prototype.getMonthName = function() {
        return months[ this.getMonth() ];
    };
    Date.prototype.getDayName = function() {
        return days[ this.getDay() ];
    };
})();

var now = new Date();

var day = now.getDayName();
var month = now.getMonthName();
user113716
источник
2
@Will: Пожалуйста. К вашему сведению, если вы собираетесь делать это часто, вы можете легко прототипировать функциональность в Dateобъекте. Я обновлюсь через минуту.
user113716
3
Локализуйте свои данные, и нет необходимости в массивах только для одного языка! selectedLocale = 'ru-ru'; selectedDate.toLocaleString (selectedLocale, {месяц: "длинный"});
Ryan Loggerythm
Я сделал это только сейчас, но в качестве первого элемента в массиве пришлось использовать понедельник, а не воскресенье. Тем не менее, отлично работает.
nrowegt 02
4
Нет нет Нет Нет. Просто используйте стандартный класс Date в javascript. Нет необходимости в массивах или дополнительной библиотеке. Смотрите мой ответ: stackoverflow.com/a/50293232/760777
RWC
52

Используйте стандартный класс Date javascript. Нет необходимости в массивах. Нет необходимости в дополнительных библиотеках.

См. Https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

var options = {  weekday: 'long', year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: false };
var prnDt = 'Printed on ' + new Date().toLocaleTimeString('en-us', options);

console.log(prnDt);

RWC
источник
@RWC, это хорошо, но как мне получить только будний день без остальной части даты? IE хочу saturdayвместо saturday, 9th february 2019.
Владимир Нул
4
@Valdimir Nul: var prnDt = 'Напечатано' + новая дата (). ToLocaleDateString ('en-us', {будний день: 'long'}); console.log (prnDt);
RWC
Определенно лучший способ сделать это.
Диего Виктор де Хесус
@Vladimir Проблема с Firefox, время отображается всегда, затем:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Бруно Л.
8

Вы также можете сделать следующее: Расширить объект даты для возврата дня недели:

Date.prototype.getWeekDay = function() {
    var weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    return weekday[this.getDay()];
}

поэтому вы можете вызывать только date.getWeekDay ();

Притам Нархеде
источник
7

Как @ L-Ray уже предложил, вы можете посмотреть в moment.js , а также

Образец

var today = moment();
var result = {
  day: today.format("dddd"),
  month: today.format("MMM")
}

document.write("<pre>" + JSON.stringify(result,0,4) + "</pre>");
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>

Раджеш
источник
5

К сожалению, Dateобъект в javascript возвращает информацию о месяцах только в числовом формате. Более быстрый способ сделать это - создать массив месяцев (они не должны часто меняться!) И создать функцию, которая возвращает имя на основе числа.

Что-то вроде этого:

function getMonthNameByMonthNumber(mm) { 
   var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

   return months[mm]; 
}

Таким образом, ваш код становится:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;
lucke84
источник
Не используйте, new Array()если у вас нет на то причины. []Обозначения гораздо понятнее и проще понять
Tomás Lima
5
var GetWeekDays = function (format) {
    var weekDays = {};

    var curDate = new Date();
    for (var i = 0; i < 7; ++i) {
        weekDays[curDate.getDay()] = curDate.toLocaleDateString('ru-RU', {
            weekday: format ? format : 'short'
        });

        curDate.setDate(curDate.getDate() + 1);
    }

    return weekDays;
};

me.GetMonthNames = function (format) {
    var monthNames = {};

    var curDate = new Date();
    for (var i = 0; i < 12; ++i) {
        monthNames[curDate.getMonth()] = curDate.toLocaleDateString('ru-RU', {
            month: format ? format : 'long'
        });

        curDate.setMonth(curDate.getMonth() + 1);
    }

    return monthNames;
};
PSS
источник
ru-RU будет en-US (для американского английского) или en-GB (для британского английского).
Сара
3

Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

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

Полная форма:

const options = { weekday: 'long' };
const date = new Date();
console.log(date.toLocaleDateString('en-US', options));

Один лайнер:

console.log(new Date().toLocaleDateString('en-US', { weekday: 'long' }));

Примечание. Существуют и другие языковые параметры для локали, но здесь представлен вариант для английского языка (США).

камбист
источник
2

Вы можете посмотреть datejs, который, например, анализирует локализованный вывод даты.

В вашем примере форматирование может выглядеть так:

new Date().toString('dddd, d MMMM yyyy at HH:mm:ss') 
Дэн
источник
1

Все просто. Вы можете установить опцию для отображения только дней недели в toLocaleDateString (), чтобы получить имена. Например:

(новая дата ()). toLocaleDateString ('en-US', {weekday: 'long'}) вернет только день недели. И (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) вернет только месяц в году.

Антонио Джа
источник
0
  function currentDate() {
      var monthNames = [ "JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE",
                     "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER" ];
      var days = ['SUNDAY','MONDAY','TUESDAY','WEDNESDAY','THURSDAY','FRIDAY','SATURDAY'];                       
      var today = new Date();
      var dd   = today.getDate();
      var mm   = monthNames[today.getMonth()]; 
      var yyyy = today.getFullYear();
      var day  = days[today.getDay()];
      today = 'Date is :' + dd + '-' + mm + '-' + yyyy;
      document.write(today +"<br>");
      document.write('Day is : ' + day );
  }
  currentDate();
Анил Кумар
источник
-1

Напишите Date = document.write (Date ());

Ана Гауна
источник
как это решение проблемы OP?
Анис