Comment obtenir le jour de la semaine et le mois de l'année?

124

Je ne connais pas grand-chose à Javascript, et les autres questions que j'ai trouvées sont liées aux opérations sur les dates, pas seulement à l'obtention des informations dont j'ai besoin.

Objectif

Je souhaite obtenir la date au format ci-dessous:

Imprimé le jeudi 27 janvier 2011 à 17:42:21

Jusqu'à présent, j'ai obtenu ce qui suit:

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;

J'ai maintenant besoin de savoir comment obtenir le jour de la semaine et le mois de l'année (leurs noms).

Y a-t-il un moyen simple de le faire, ou dois-je envisager d'utiliser des tableaux où je voudrais simplement indexer la bonne valeur en utilisant now.getMonth()et now.getDay()?

Will Marcouiller
la source

Réponses:

233

Oui, vous aurez besoin de tableaux.

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

Ou vous pouvez utiliser la bibliothèque date.js.


ÉDITER:

Si vous comptez les utiliser fréquemment, vous souhaiterez peut-être les étendre Date.prototypepour l'accessibilité.

(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();
utilisateur113716
la source
2
@Will: De rien. Pour info, si vous comptez faire cela fréquemment, vous pouvez facilement prototyper la fonctionnalité dans l' Dateobjet. Je vais mettre à jour dans une minute.
user113716
3
Localisez vos données et vous n'avez pas besoin de tableaux en une seule langue! selectedLocale = 'en-nous'; selectedDate.toLocaleString (selectedLocale, {month: "long"});
Ryan Loggerythm
Je l'ai fait tout à l'heure, mais j'ai dû utiliser lundi comme premier élément du tableau, pas dimanche. Pourtant, fonctionne très bien.
nrowegt
4
Non Non Non Non. Utilisez simplement la classe Date javascript standard. Pas besoin de tableaux ou d'une bibliothèque supplémentaire. Voir ma réponse: stackoverflow.com/a/50293232/760777
RWC
52

Utilisez la classe de date javascript standard. Pas besoin de tableaux. Pas besoin de bibliothèques supplémentaires.

Voir 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
la source
@RWC c'est bien, mais comment est-ce que j'arrive à obtenir uniquement le jour de la semaine sans le reste de la partie de la date? IE je veux saturdayau lieu de saturday, 9th february 2019.
Vladimir Nul
4
@Valdimir Nul: var prnDt = 'Imprimé le' + nouvelle date (). ToLocaleDateString ('en-us', {jour de la semaine: 'long'}); console.log (prnDt);
RWC
Certainement la meilleure façon de le faire.
Diego Victor de Jesus
@Vladimir Il y a un problème avec Firefox, l'heure est toujours affichée, puis:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.
8

Une chose que vous pouvez également faire est de prolonger l'objet de date pour renvoyer Weekday par:

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

ainsi, vous ne pouvez appeler que date.getWeekDay ();

Pritam Narkhede
la source
7

Comme @ L-Ray a déjà suggéré, vous pouvez regarder dans moment.js aussi bien

Échantillon

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
la source
5

Malheureusement, l' Dateobjet en javascript renvoie des informations sur les mois uniquement au format numérique. La chose la plus rapide que vous pouvez faire est de créer un tableau de mois (ils ne sont pas censés changer fréquemment!) Et de créer une fonction qui renvoie le nom en fonction du nombre.

Quelque chose comme ça:

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

   return months[mm]; 
}

Votre code devient donc:

var prnDt = "Printed on Thursday, " + now.getDate() + " " + getMonthNameByMonthNumber(now.getMonth) + " "+  now.getFullYear() + " at " + h + ":" + m + ":" s;
lucke84
la source
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
la source
ru-RU serait en-US (pour l'anglais américain) ou en-GB (pour l'anglais britannique).
Sarah
3

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

La méthode toLocaleDateString () renvoie une chaîne avec une représentation sensible à la langue de la partie date de cette date. Les nouveaux arguments de paramètres régionaux et d'options permettent aux applications de spécifier la langue dont les conventions de formatage doivent être utilisées et permettent de personnaliser le comportement de la fonction. Dans les implémentations plus anciennes, qui ignorent les arguments de paramètres régionaux et d'options, les paramètres régionaux utilisés et la forme de la chaîne renvoyée dépendent entièrement de l'implémentation.

Forme longue:

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

Bon mot:

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

Remarque: il existe d'autres options de langue pour les paramètres régionaux, mais celle présentée ici pour l'anglais américain

cambiste
la source
2

Vous pouvez regarder datejs qui analyse la sortie de date localisée par exemple.

La mise en forme peut ressembler à ceci, dans votre exemple:

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

C'est simple. Vous pouvez définir l'option pour afficher uniquement les jours de la semaine dans toLocaleDateString () pour obtenir les noms. Par exemple:

(new Date ()). toLocaleDateString ('en-US', {jour de la semaine: 'long'}) renverra uniquement le jour de la semaine. Et (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) ne renverra que le mois de l'année.

Antonio Jha
la source
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
la source
-1

Écrivez la date = document.write (Date ());

Ana Gauna
la source
comment est-ce la solution au problème du PO?
Anees