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


Я мало знаю о 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()?

9 97

9 ответов:

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

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

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


EDIT:

Если вы собираетесь использовать их часто, вы можете расширить 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();

одна вещь, которую вы также можете сделать, это расширить объект даты, чтобы вернуть будний день:

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

Итак, вы можете только назвать дату.getWeekDay ();

Как @L-Ray уже предложил, Вы можете посмотреть в момент.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>

используйте стандартный класс даты 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);

к сожалению, 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;

используя http://phrogz.net/JS/FormatDateTime_JS.txt Вы можете просто:

var now = new Date;
var prnDt = now.customFormat( "Printed on #DDDD#, #D# #MMMM# #YYYY# at #hhh#:#mm#:#ss#" );
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;
};

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

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

new Date().toString('dddd, d MMMM yyyy at HH:mm:ss') 

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

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