Tagesname vom Datum in JS

79

Ich muss den Namen des Tages mit einem bestimmten Datum (wie "23.05.2014") anzeigen, das ich von einem Drittanbieter erhalte.

Ich habe es versucht Date , aber ich bekomme nur das Datum.

Was ist der richtige Weg, um den Namen des Tages zu erhalten?

DhrubaJyoti
quelle
Konvertieren Sie es in ein Datum, rufen Sie getDay()an, um die Tagesnummer (0-6, 0 == Sonntag) zu erhalten, und verwenden Sie dann ein Array der Tagesnamen, um die Nummer dem Namen zuzuordnen.
Verzeihung

Antworten:

115

Sie können die Date.getDay()Methode verwenden, die für Sonntag 0 und für Samstag bis 6 zurückgibt. Sie können also einfach ein Array mit dem Namen für die Tagesnamen erstellen:

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

Hier dateStringist die Zeichenfolge, die Sie von der Drittanbieter-API erhalten haben.

Wenn Sie die ersten drei Buchstaben des Tagesnamens verwenden möchten, können Sie alternativ Datedie integrierte toStringMethode des Objekts verwenden:

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

Dies wird das erste Wort in der d.toString()Ausgabe sein, das der 3-Buchstaben-Tagesname ist.

Joeytje50
quelle
14
Dies ist wahrscheinlich NICHT der beste Weg, dies zu tun. Die Standardklasse Javascript Date bietet Möglichkeiten, den vollständigen Namen abzurufen. Schau dir meine Antwort an.
RWC
Aber ... "Standard-Javascript-Datumsklasse" funktioniert nicht in allen Browsern.
Hernán Eche
@ HernánEche laut developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… unterstützt jeder einzelne Browser Date ganz gut. Welcher Browser funktioniert bei Ihnen nicht?
Joeytje50
@ Joeytje50 WebView von JavaFx, aber ok, qualifiziert sich nicht als "Browser"
Hernán Eche
@ HernánEche JavaFx ist, soweit ich es im Internet finden kann, Java, nicht JavaScript. Diese Sprachen sind völlig unterschiedlich, daher sollten Sie versuchen, nach Dingen zu suchen, die mit Java zusammenhängen. Weitere Informationen hierzu finden Sie unteroftwareguild.com/faq/difference-between-java-and-javascript (oder einem anderen Ergebnis bei Google unter "Unterschied zwischen Java und Javascript").
Joeytje50
164

Ahum, drei Jahre später ...

Warum verwendet niemand die Methoden der Standard-Javascript-Date-Klasse (außer Callum Linington)?

Siehe https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

Abrufen des Tagesnamens von einem Datum :

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.

Alle Wochentage in einem Array abrufen:

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.

Verwenden Sie für amerikanische Daten 'en-US' als Gebietsschema.

RWC
quelle
2
Diese Methode war mir zum Zeitpunkt der Veröffentlichung meiner Lösung überhaupt nicht bekannt. Sehr schöne Lösung. Es ist auch schön, dass dies direkt zur Internationalisierung führt. Es ist auch schön, etwas Neues zu lernen: P
Joeytje50
1
Ein möglicher Grund, warum manche Benutzer es möglicherweise nicht verwenden, ist, dass es laut der Seite, auf die Sie verlinkt haben, anscheinend keine vollständige Kompatibilität mit Gebietsschemas auf mobilen Plattformen gibt.
John
@ John Jun: Stimmt. Derzeit unterstützen die meisten Browser auf Mobilgeräten dies. Am bemerkenswertesten ist, dass der Standard-Android-Browser dies nicht tut. Chrome auf Android tut es. (Es wird empfohlen, Chrome trotzdem auf Android zu verwenden. Andere Diskussion.)
RWC
Funktioniert nur teilweise in IE10. Der Wochentag wird erkannt, gibt aber immer den langen Namen zurück, auch wenn ich 'short' angebe. 'short' funktioniert in Chrome. Auch IE10 erkennt das Schlüsselwort 'month' nicht. Es wird nur ein Datum zurückgegeben, z. B. "Do 1. Januar 1970", wenn es mit "long" verwendet wird, während Chrome die langen Monatsnamen zurückgibt.
Larphoid
Hmm, lassen Sie mich das umformulieren. Nach einigem Hin und Her scheint sich IE10 nicht um irgendetwas zu kümmern, das Sie angeben, nicht einmal um das Gebietsschema. Es wird immer ein vollständiges Datum mit langen Namen entsprechend dem Gebietsschema des Betriebssystems zurückgegeben.
Larphoid
18
let weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][new Date().getDay()]
Alexandre Vieira
quelle
14

Verwenden Sie die Methode Date.toLocaleString ():

new Date(dateString).toLocaleString('en-us', {weekday:'long'})
iamnox
quelle
9
var days = [
    "Sunday",
    "Monday",
    "...", //etc
    "Saturday"
];

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

Lesen Sie einfach das Date-Objekt im JavaScript-Handbuch

Um andere Dinge mit Datum zu tun, wie z. B. eine lesbare Zeichenfolge daraus zu erhalten, verwende ich:

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

Wenn Sie nur Uhrzeit oder Datum möchten, verwenden Sie:

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

Sie können Daten entweder folgendermaßen analysieren:

var d = new Date(dateToParse);

oder

var d = Date.parse(dateToParse);
Callum Linington
quelle
Tage [Date.now (). getDay () ist falsch, da Date.now () eine Zahl zurückgibt, kein Datum.
Tronman
es sollte seindays[new Date().getDay()]
Callum Linington
3

Schau dir das an :

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일 목요일

Quelle: Mozilla Doc

Boris Detry
quelle
3

Einfachster und einfachster Weg:

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

Sie können ein Objekt verwenden

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

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

Versuchen Sie es mit diesem Code:

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

Dadurch erhalten Sie den Tagesnamen im Zeichenfolgenformat.

Hardik Patel
quelle
1
Eine Lösung mit toLocaleString wurde 2 Jahre zuvor veröffentlicht. Warum wird diese Antwort benötigt?
RobG
1

Ich bin kein Fan von überkomplizierten Lösungen, wenn jemand anderes etwas Besseres findet, lassen Sie es uns bitte wissen :)

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>
Edgar Kelevra
quelle
1

Lösung Nr.1

var today = new Date();

  var day = today.getDay();

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

  var dayname = days[day];

  document.write(dayname);

Lösung Nr. 2

      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);
Aravind Chaudhary
quelle
1

Kürzester Liner

Ändern Sie den UTC-Tag von 6 auf 5, wenn Array ab Sonntag beginnen soll.

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

Hühner
quelle
0

Verwenden Sie es einfach:

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

Informationen zu Formaten finden Sie hier. Documentation DateTimeFormat

Alexander Zakusilo
quelle
-1

Verwenden Sie stattdessen nicht ein Array, sondern ein Array. Dies ist nur eine alternative Methode.

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

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

Sie sollten wirklich Google verwenden, bevor Sie hier posten.

Da andere Leute die Array-Methode gepostet haben, zeige ich Ihnen einen alternativen Weg mit einer switch-Anweisung.

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

    ... rest of cases

    default:
        // do something
        break;
}

Das obige funktioniert jedoch, das Array ist die bessere Alternative. Sie können auch if()Anweisungen verwenden, aber eine switch-Anweisung wäre viel sauberer als mehrere if's.

Nicolas
quelle
1
Dies gibt einen numerischen Wert von 0-6 zurück - nicht den Wochentag.
Casey Falk
Sie können von dort aus damit umgehen und es in einen Tag umwandeln.
Nicolas
1
Das ist wahr. Ich lasse Sie nur wissen, dass dies die geschriebene Frage von OP nicht beantwortet.
Casey Falk
A switch? Warum würden Sie eine switchanstelle einer einfachen verwenden Array? Ich meine, ich denke, es ist eine Alternative zu den anderen Antworten ... Aber heilige Schreibzeit, Batman ...: /
Casey Falk
Denn warum das gleiche posten wie 2 andere Leute?
Nicolas