Назва дня від дати в 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.