Як отримати день тижня та місяць року?


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();

2
@Will: Ласкаво просимо. FYI, якщо ви будете робити це часто, ви можете легко прообразувати функціональність в Dateоб'єкт. Я оновлюсь за хвилину.
користувач113716

3
Локалізуйте свої дані, і немає необхідності в масівах лише однією мовою! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {місяць: "довгий"});
Ryan Loggerythm

Я це робив лише зараз, але довелося використовувати понеділок як перший елемент масиву, а не неділю. Все-таки чудово працює.
nrowegt

4
Ні, ні, ні, ні. Просто використовуйте стандартний клас дати JavaScript. Немає потреби в масивах чи додатковій бібліотеці. Дивіться моя відповідь: stackoverflow.com/a/50293232/760777
RWC

52

Використовуйте стандартний клас дати 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 це приємно, але як мені вдається отримати лише будній день без решти частини дати? IE я хочу saturdayзамість saturday, 9th february 2019.
Володимир Нул

4
@Valdimir Nul: var prnDt = 'Надруковано' + нова дата (). ToLocaleDateString ('en-us', {weekday: '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;

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;
};

ru-RU буде en-US (для американської англійської) або en-GB (для англійської англійської).
Сара


3

Від https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

ToLocaleDateString () повертає рядок із чутливим до мови поданням частини дати цієї дати. Нові параметри локалів та параметрів дозволяють програмам вказувати мову, конвенції форматування якої слід використовувати, і дозволяють налаштувати поведінку функції. У старих реалізаціях, які ігнорують аргументи локалів та параметрів, використовуваний локал та повернута форма рядка повністю залежать від реалізації.

Довга форма:

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'}) повернеться лише день тижня. І (нова дата ()). ToLocaleDateString ('en-US', {місяць: '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();

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.