Как получить день недели и месяц в году?
Я не очень разбираюсь в 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()
?
Ответы
Ответ 1
Да, вам понадобятся массивы.
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.
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();
Ответ 2
Используйте стандартный класс даты 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);
Ответ 3
Одной вещью, которую вы также можете сделать, является расширение объекта даты, чтобы вернуть будний день:
Date.prototype.getWeekDay = function() {
var weekday = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
return weekday[this.getDay()];
}
поэтому вы можете вызывать только date.getWeekDay();
Ответ 4
Как уже сказал @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;
Ответ 6
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;
};
Ответ 7
Используя 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#" );
Ответ 8
Вы можете посмотреть datejs, который, например, анализирует локализованный вывод даты.
Форматирование может выглядеть так: в вашем примере:
new Date().toString('dddd, d MMMM yyyy at HH:mm:ss')
Ответ 9
Так просто. Вы можете установить опцию для отображения только дней недели в toLocaleDateString(), чтобы получить имена. Например:
(new Date()). toLocaleDateString ('en-US', {weekday: 'long'}) вернет только день недели. И (new Date()). ToLocaleDateString ('en-US', {month: 'long'}) вернет только месяц года.
Ответ 10
Из https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
Метод toLocaleDateString() возвращает строку с чувствительным к языку представлением части даты этой даты. Новые аргументы locales и options позволяют приложениям указывать язык, для которого должны использоваться соглашения о форматировании, и позволяют настраивать поведение функции. В более старых реализациях, в которых игнорируются аргументы 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' }));
Примечание: есть другие языковые опции для локали, но представленные здесь для американского английского
Ответ 11
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();