Wie bekomme ich den Wochentag und den Monat des Jahres?


124

Ich weiß nicht viel über Javascript, und die anderen Fragen, die ich gefunden habe, beziehen sich auf Operationen an Daten und beziehen sich nicht nur auf die Informationen, die ich benötige.

Zielsetzung

Ich möchte das Datum wie folgt formatieren:

Gedruckt am Donnerstag, 27. Januar 2011 um 17:42:21 Uhr

Bisher habe ich folgendes bekommen:

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;

Ich muss jetzt wissen, wie ich den Wochentag und den Monat des Jahres (ihre Namen) bekomme.

Gibt es eine einfache Möglichkeit, dies zu tun, oder sollte ich die Verwendung von Arrays in Betracht ziehen, bei denen ich einfach mit now.getMonth()und auf den richtigen Wert indizieren würde now.getDay()?

Antworten:


233

Ja, Sie benötigen Arrays.

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

Oder Sie können die Bibliothek date.js verwenden.


BEARBEITEN:

Wenn Sie diese häufig verwenden, möchten Sie möglicherweise die Date.prototypeBarrierefreiheit erweitern.

(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
@ Will: Gern geschehen. Zu Ihrer Information, wenn Sie dies häufig tun, können Sie die Funktionalität problemlos in das DateObjekt prototypisieren . Ich werde in einer Minute aktualisieren.
user113716

3
Lokalisieren Sie Ihre Daten und Sie benötigen keine Arrays nur für eine Sprache! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {month: "long"});
Ryan Loggerythm

Ich habe das gerade getan, musste aber Montag als erstes Element im Array verwenden, nicht Sonntag. Funktioniert trotzdem super.
Nrowegt

4
Nein nein Nein Nein. Verwenden Sie einfach die Standard-Javascript-Date-Klasse. Keine Notwendigkeit für Arrays oder eine zusätzliche Bibliothek. Siehe meine Antwort: stackoverflow.com/a/50293232/760777
RWC

51

Verwenden Sie die Standard-Javascript-Datumsklasse. Keine Notwendigkeit für Arrays. Keine zusätzlichen Bibliotheken erforderlich.

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


@RWC das ist schön, aber wie schaffe ich es, nur den Wochentag ohne den Rest des Datums zu bekommen? IE will ich saturdaystatt saturday, 9th february 2019.
Vladimir Nul

4
@Valdimir Nul: var prnDt = 'Gedruckt am' + neues Datum (). ToLocaleDateString ('en-us', {Wochentag: 'lang'}); console.log (prnDt);
RWC

Auf jeden Fall der beste Weg, es zu tun.
Diego Victor de Jesus

8

Sie können auch das Datumsobjekt erweitern, um den Wochentag zurückzugeben um:

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

Sie können also nur date.getWeekDay () aufrufen.


7

Wie @ L-Ray bereits vorgeschlagen hat, können Sie sich moment.js ansehen auch

Stichprobe

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

Unglücklicherweise, Date Objekt in Javascript Informationen über Monate nur im numerischen Format zurück. Das Schnellere, was Sie tun können, ist, ein Array von Monaten zu erstellen (sie sollten sich nicht häufig ändern!) Und eine Funktion zu erstellen, die den Namen basierend auf der Nummer zurückgibt.

Etwas wie das:

function getMonthNameByMonthNumber(mm) { 
   var months = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); 

   return months[mm]; 
}

Ihr Code wird daher:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;

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

ru-RU wäre en-US (für amerikanisches Englisch) oder en-GB (für britisches Englisch).
Sarah


3

Von https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

Der toLocaleDateString () Methode gibt eine Zeichenfolge mit einer Darstellung des dieses Datums zurück. Mit den neuen Argumenten für Gebietsschemas und Optionen können Anwendungen die Sprache angeben, deren Formatierungskonventionen verwendet werden sollen, und das Verhalten der Funktion anpassen. In älteren Implementierungen, bei denen die Argumente für Gebietsschemas und Optionen ignoriert werden, sind das verwendete Gebietsschema und die Form der zurückgegebenen Zeichenfolge vollständig implementierungsabhängig.

Lange Form:

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

Einzeiler:

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

Hinweis: Es gibt andere Sprachoptionen für das Gebietsschema, die hier für US-Englisch


2

Sie können sich datejs ansehen, die beispielsweise die lokalisierte Datumsausgabe analysieren.

Die Formatierung könnte in Ihrem Beispiel folgendermaßen aussehen:

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

1

Das ist einfach. Sie können die Option so einstellen, dass nur Wochentage in toLocaleDateString () angezeigt werden, um die Namen abzurufen. Beispielsweise:

(neues Datum ()). toLocaleDateString ('en-US', {Wochentag: 'lang'}) gibt nur den Wochentag zurück. Und (neues Datum ()). ToLocaleDateString ('en-US', {month: 'long'}) gibt nur den Monat des Jahres zurück.


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

-1

Schreiben Sie das Datum = document.write (Date ());


Wie ist dies die Lösung des OP-Problems?
Anees
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.