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()?

Will Marcouiller
quelle

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();
user113716
quelle
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
quelle
@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.

Pritam Narkhede
quelle
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>

Rajesh
quelle
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;
Glück 84
quelle
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;
};
PSS
quelle
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

Kambist
quelle
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') 
Dan
quelle
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.

Antonio Jha
quelle
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();
Anil kumar
quelle
-1

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

Ana Gauna
quelle
Wie ist dies die Lösung des OP-Problems?
Anees