Назва дня від дати в JS


82

Мені потрібно відобразити назву дня з датою (наприклад, "23.05.2014"), яку я отримую від третьої сторони.

Я намагався використовувати Date, але отримую лише дату.

Який правильний спосіб отримати назву дня?


перетворіть його на дату, потім зателефонуйте, getDay()щоб отримати номер дня (0-6, 0 == неділя), а потім використовуйте масив назв днів, щоб зіставити число з іменем.
— простинсон

Відповіді:


122

Ви можете використовувати Date.getDay()метод, який повертає 0 за неділю, до 6 для суботи. Отже, ви можете просто створити масив з іменем імен днів:

var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var d = new Date(dateString);
var dayName = days[d.getDay()];

Ось dateStringрядок, який ви отримали від сторонніх API.

Як варіант, якщо вам потрібні перші 3 літери імені дня, ви можете скористатися Dateвбудованим toStringметодом об’єкта :

var d = new Date(dateString);
var dayName = d.toString().split(' ')[0];

Це займе перше слово у d.toString()вихідних даних, яке буде триденною назвою дня.


14
Це, мабуть, НЕ найкращий спосіб зробити це. Стандартний клас дати Javascript надає способи отримання повного імені. Погляньте на мою відповідь.
— RWC

Але ... "стандартний клас дати Javascript" працює не у всіх браузерах.
— Hernán Eche

@ HernánEche за версією developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ ... кожен окремий браузер підтримує Date just fine. Який браузер у вас не працює?
— Joeytje50,

@ Joeytje50 WebView від JavaFx, але добре, не кваліфікується як "браузер"
— Ернан Ече

@ HernánEche JavaFx, наскільки я можу знайти в Інтернеті, це Java, а не JavaScript. Ці мови абсолютно різні, тому вам слід спробувати шукати речі, пов’язані з Java. Для отримання додаткової інформації про це див.
— Joeytje50

173

Ахум, через три роки ...

Чому ніхто не використовує методи, передбачені стандартним класом дати JavaScript (крім Каллума Лінінгтона)?

Див. Https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

Отримання назви дня з дати :

function getDayName(dateStr, locale)
{
    var date = new Date(dateStr);
    return date.toLocaleDateString(locale, { weekday: 'long' });        
}

var dateStr = '05/23/2014';
var day = getDayName(dateStr, "nl-NL"); // Gives back 'Vrijdag' which is Dutch for Friday.

Отримання всіх буднів у масиві:

function getWeekDays(locale)
{
    var baseDate = new Date(Date.UTC(2017, 0, 2)); // just a Monday
    var weekDays = [];
    for(i = 0; i < 7; i++)
    {       
        weekDays.push(baseDate.toLocaleDateString(locale, { weekday: 'long' }));
        baseDate.setDate(baseDate.getDate() + 1);       
    }
    return weekDays;
}

var weekDays = getWeekDays('nl-NL'); // Gives back { 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag', 'zondag'} which are the days of the week in Dutch.

Для американських дат використовуйте 'en-US' як локаль.


2
На момент розміщення мого рішення я взагалі не знав про цей метод. Дійсно дуже гарне рішення. Також приємно, що це безпосередньо забезпечує інтернаціоналізацію. Крім того, приємно дізнатися щось нове: P
— Joeytje50

1
Можлива причина, через яку деякі люди можуть не використовувати його, тому що, відповідно до сторінки, на яку ви посилаєтесь, здається, що на мобільних платформах немає повної сумісності з локалями.
— Джон

@ Джон Червня: Правда. В даний час більшість браузерів на мобільних пристроях підтримують це. Найпомітніше, що браузер Android за замовчуванням цього не робить. Chrome на Android робить. (У будь-якому випадку рекомендується використовувати Chrome на Android. Різне обговорення.)
— RWC

Лише частково працює в IE10. будній день розпізнається, але завжди повертає довге ім'я, навіть якщо я вказав "короткий". "короткий" працює в Chrome. Також IE10 не розпізнає ключове слово "місяць". Він просто повертає дату, як-от „Чт, 1 січня 1970 р.”, Коли використовується з „long”, тоді як Chrome повертає довгі назви місяців.
— Ларфоїд

Хм, дозвольте мені переформулювати це. Після ще однієї дрібнички IE10, здається, не турбує нічого, що ви вказали, навіть локаль. Він завжди повертає повну дату з довгими іменами відповідно до мовної системи ОС.
— Ларфоїд


17

використовуйте метод Date.toLocaleString ():

new Date(dateString).toLocaleString('en-us', {weekday:'long'})

9
var days = [
    "Sunday",
    "Monday",
    "...", //etc
    "Saturday"
];

console.log(days[new Date().getDay()]);

Просто, прочитайте об’єкт Date у посібнику JavaScript

Щоб робити інші речі з датою, наприклад отримати читабельний рядок із неї, я використовую:

var d = new Date();
d.toLocaleString();

Якщо ви просто хочете використовувати час або дату:

d.toLocaleTimeString();
d.toLocaleDateString();

Ви можете проаналізувати дати, виконавши:

var d = new Date(dateToParse);

або

var d = Date.parse(dateToParse);

days [Date.now (). getDay () неправильний, оскільки Date.now () повертає число, а не Date.
— tronman

так повинно бутиdays[new Date().getDay()]
— Каллум Лінінгтон

3

Погляньте на це:

var event = new Date(Date.UTC(2012, 11, 20, 3, 0, 0));

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };

console.log(event.toLocaleDateString('de-DE', options));
// expected output: Donnerstag, 20. Dezember 2012

console.log(event.toLocaleDateString('ar-EG', options));
// expected output: الخميس، ٢٠ ديسمبر، ٢٠١٢

console.log(event.toLocaleDateString('ko-KR', options));
// expected output: 2012년 12월 20일 목요일

Джерело: Mozilla Doc


3

Найпростіший і найпростіший спосіб:

var days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
var dayName = days[new Date().getDay()];

2

Я не прихильник надскладних рішень, якщо хтось придумає щось краще, будь ласка, повідомте нам :)

any-name.js

var today = new Date().toLocaleDateString(undefined, {
    day: '2-digit',
    month: '2-digit',
    year: 'numeric',
    weekday: 'long'
});
any-name.html
<script>
    document.write(today);
</script>

1

можна використовувати об’єкт

var days = {
   'Mon': 'Monday',
   'etc..': 'etc..',
   'Fri': 'Friday'
}

var date = new Date().toString().split(' ')[0]; //get day abreviation first
console.log(days[date]);

1

Спробуйте використати цей код:

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

це дасть вам назву дня у рядковому форматі.


1
Розчин з toLocaleString був розміщений на 2 роки раніше, навіщо потрібен цей відповідь?
— RobG

1

Рішення No1

var today = new Date();

  var day = today.getDay();

  var days = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

  var dayname = days[day];

  document.write(dayname);

Рішення No2

      var today = new Date();

  var day = today.getDay();

  switch(day){
    case 0:
    day = "Sunday";
    break;

    case 1:
    day = "Monday";
    break;

    case 2:
    day ="Tuesday";
    break;

    case 3:
    day = "Wednesday";
    break;

    case 4:
    day = "Thrusday";
    break;

    case 5:
    day = "Friday";
    break;

    case 6:
    day = "Saturday";
    break;
  }


document.write(day);

1

Найкоротший один лайнер

Змініть день UTC з 6 на 5, якщо ви хочете, щоб Array починався з неділі.

const getWeekDays = (locale) => [...Array(7).keys()].map((v)=>new Date(Date.UTC(1970, 0, 6+v)).toLocaleDateString(locale, { weekday: 'long' }));

console.log(getWeekDays('de-DE')); 


1

Щоб отримати день з будь-якої заданої дати, просто передайте дату в новий об’єкт Date:

let date = new Date("01/05/2020");
let day = date.toLocaleString('en-us', {weekday: 'long'});
console.log(day);
// expected result = tuesday

Щоб дізнатись більше, перейдіть до mdn-date.prototype.toLocaleString () ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString )


0

Просто використовуйте його:

function getWeekDayNames(format = 'short', locale = 'ru') {
  const names = [];
  const date = new Date('2020-05-24');
  let days = 7;

  while (days !== 0) {
    date.setDate(date.getDate() + 1);
    names.push(date.toLocaleDateString(locale, { weekday: format }));
    days--;
  }

  return names;
}

Про формати ви можете прочитати тут Документація DateTimeFormat


0

Рішення в один рядок:

const day = ["sunday","monday","tuesday","wednesday","thursday","friday","saturday"][new Date().getDay()]

-1

Не найкращий метод, замість цього використовуйте масив. Це лише альтернативний метод.

http://www.w3schools.com/jsref/jsref_getday.asp

var date = new Date();
var day = date.getDay();

Вам слід дійсно використовувати google, перш ніж розміщувати тут.

Оскільки інші люди опублікували метод масиву, я покажу вам альтернативний спосіб використання оператора switch.

switch(day) {
    case 0:
        day = "Sunday";
        break;
    case 1:
        day = "Monday";
        break;

    ... rest of cases

    default:
        // do something
        break;
}

Вищевказане працює, однак масив є кращою альтернативою. Ви також можете використовуватиif() оператори, однак оператор switch буде набагато чистішим, ніж кілька if.


1
Це поверне числове значення від 0-6, а не від дня тижня.
— Кейсі Фальк

Ви можете впоратися з цим звідти і перетворити на день.
— Ніколас

1
Це правда. Я просто повідомляю вам, що це не відповідає на запитання OP, написане.
— Кейсі Фальк

A switch? Чому ви використовуєте switchзамість простого Array? Я маю на увазі, я думаю, це альтернатива іншим відповідям ... Але святий час написання, Бетмене ...: /
— Кейсі Фальк

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