Jak uzyskać dzień tygodnia i miesiąc roku?

124

Nie wiem zbyt wiele o Javascript, a pozostałe pytania, które znalazłem, dotyczą operacji na datach, a nie tylko uzyskiwania informacji, których potrzebuję.

Cel

Chcę otrzymać datę w poniższym formacie:

Wydrukowano w czwartek, 27 stycznia 2011 o 17:42:21

Do tej pory otrzymałem:

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;

Muszę teraz wiedzieć, jak uzyskać dzień tygodnia i miesiąc roku (ich nazwy).

Czy istnieje prosty sposób, aby to zrobić, czy też powinienem rozważyć użycie tablic, w których po prostu indeksowałbym odpowiednią wartość za pomocą now.getMonth()i now.getDay()?

Will Marcouiller
źródło

Odpowiedzi:

233

Tak, będziesz potrzebować tablic.

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

Możesz też skorzystać z biblioteki date.js.


EDYTOWAĆ:

Jeśli zamierzasz często z nich korzystać, możesz rozszerzyć Date.prototypedostępność.

(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
źródło
2
@Will: Nie ma za co. FYI, jeśli będziesz to robić często, możesz łatwo prototypować funkcjonalność w Dateobiekcie. Zaktualizuję za minutę.
user113716
3
Zlokalizuj swoje dane i nie ma potrzeby stosowania tablic tylko w jednym języku! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {miesiąc: "długi"});
Ryan Loggerythm,
Zrobiłem to przed chwilą, ale musiałem użyć poniedziałku jako pierwszego elementu tablicy, a nie niedzieli. Mimo to działa świetnie.
nrowegt
4
Nie nie nie nie. Po prostu użyj standardowej klasy Date w javascript. Nie potrzeba tablic ani dodatkowej biblioteki. Zobacz moją odpowiedź: stackoverflow.com/a/50293232/760777
RWC
52

Użyj standardowej klasy Date w javascript. Nie ma potrzeby stosowania tablic. Nie ma potrzeby posiadania dodatkowych bibliotek.

Zobacz 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
źródło
@RWC to fajnie, ale jak mogę uzyskać tylko dzień tygodnia bez reszty części daty? IE chcę saturdayzamiast saturday, 9th february 2019.
Vladimir Nul
4
@Valdimir Nul: var prnDt = 'Wydrukowano dnia' + new Date (). ToLocaleDateString ('en-us', {weekday: 'long'}); console.log (prnDt);
RWC
Zdecydowanie najlepszy sposób na zrobienie tego.
Diego Victor de Jesus
@Vladimir Wystąpił problem z Firefoksem, zawsze wyświetlany jest czas, a następnie:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.
8

Jedną z rzeczy, które możesz również zrobić, jest Extend date, aby zwrócić dzień tygodnia przez:

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

więc możesz wywołać tylko date.getWeekDay ();

Pritam Narkhede
źródło
7

Jak już zasugerował @ L-Ray , możesz również zajrzeć do momentu.js .

Próba

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
źródło
5

Niestety Dateobiekt w javascript zwraca informacje o miesiącach tylko w formacie liczbowym. Szybszą rzeczą jest utworzenie tablicy miesięcy (nie powinny się one często zmieniać!) I utworzenie funkcji zwracającej nazwę na podstawie liczby.

Coś takiego:

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

   return months[mm]; 
}

Twój kod staje się zatem:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;
lucke84
źródło
Nie używaj, new Array()chyba że masz ku temu powód. Zapis []jest znacznie jaśniejszy i łatwiejszy do zrozumienia
Tomás Lima
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
źródło
ru-RU to en-US (dla amerykańskiego angielskiego) lub en-GB (dla brytyjskiego angielskiego).
Sarah
3

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

Metoda toLocaleDateString () zwraca ciąg znaków z reprezentacją części daty tej daty, uwzględniającą język. Nowe argumenty lokalne i opcje pozwalają aplikacjom określać język, którego konwencje formatowania mają być używane, i pozwalają na dostosowanie zachowania funkcji. W starszych implementacjach, które ignorują argumenty lokalne i opcje, używane ustawienia narodowe i forma zwracanego ciągu są całkowicie zależne od implementacji.

Długa forma:

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

Jedna wkładka:

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

Uwaga: istnieją inne opcje językowe dla lokalizacji, ale ta przedstawiona tutaj dla języka angielskiego (USA)

kambista
źródło
2

Możesz na przykład spojrzeć na datejs, które analizują zlokalizowane dane wyjściowe.

W Twoim przykładzie formatowanie może wyglądać następująco:

new Date().toString('dddd, d MMMM yyyy at HH:mm:ss') 
Dan
źródło
1

To proste. Możesz ustawić opcję wyświetlania tylko dni tygodnia w toLocaleDateString (), aby uzyskać nazwy. Na przykład:

(new Date ()). toLocaleDateString ('en-US', {weekday: 'long'}) zwróci tylko dzień tygodnia. Natomiast (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) zwróci tylko miesiąc roku.

Antonio Jha
źródło
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
źródło
-1

Wpisz Date = document.write (Date ());

Ana Gauna
źródło
jak to jest rozwiązanie problemu PO?
anees