Haftanın günü ve yılın ayı nasıl alınır?


124

Javascript hakkında fazla bir bilgim yok ve bulduğum diğer sorular tarihlerdeki operasyonlarla ilgili, sadece ihtiyaç duyduğum bilgileri almakla ilgili değil.

Amaç

Tarihi aşağıdaki formatta almak istiyorum:

27 Ocak 2011 Perşembe 17:42:21 tarihinde basılmıştır.

Şimdiye kadar aşağıdakileri aldım:

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;

Şimdi haftanın gününü ve yılın ayını (adlarını) nasıl alacağımı bilmem gerekiyor.

Bunu yapmanın basit bir yolu var mı, yoksa now.getMonth()ve kullanarak doğru değeri indeksleyeceğim dizileri kullanmayı düşünmeli miyim now.getDay()?

Yanıtlar:


233

Evet, dizilere ihtiyacınız olacak.

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

Ya da date.js kitaplığını kullanabilirsiniz .


DÜZENLE:

Bunları sık kullanacaksanız, Date.prototypeerişilebilirliği genişletmek isteyebilirsiniz .

(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: Rica ederim. Bilginize, bunu sık sık yapacaksanız, işlevselliği Datenesneye kolayca prototipleyebilirsiniz . Bir dakika içinde güncelleyeceğim.
user113716

3
Verilerinizi yerelleştirin ve yalnızca tek dilli dizilere gerek yok! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {month: "long"});
Ryan Loggerythm

Bunu az önce yaptım ama dizideki ilk öğe olarak Pazar'ı değil Pazartesi'yi kullanmak zorunda kaldım. Yine de harika çalışıyor.
nrowegt

4
Hayır, hayır, hayır, hayır. Sadece standart javascript Date sınıfını kullanın. Dizilere veya fazladan bir kitaplığa gerek yok. Cevabımı görün: stackoverflow.com/a/50293232/760777
RWC

52

Standart javascript Date sınıfını kullanın. Dizilere gerek yok. Ekstra kitaplıklara gerek yok.

Bkz. 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 bu güzel, ama tarih bölümünün geri kalanı olmadan sadece hafta içi gününü nasıl alabilirim? IE saturdayyerine istiyorum saturday, 9th february 2019.
Vladimir Nul

4
@Valdimir Nul: var prnDt = 'Basıldı' + yeni Tarih (). ToLocaleDateString ('en-us', {hafta içi: 'uzun'}); console.log (prnDt);
RWC

Kesinlikle bunu yapmanın en iyi yolu.
Diego Victor de Jesus

@Vladimir Firefox ile ilgili bir sorun var, saat her zaman görüntüleniyor, ardından:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.

8

Ayrıca yapabileceğiniz bir şey, Extend date nesnesini Weekday döndürmek için şunu yapmaktır:

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

bu nedenle, yalnızca date.getWeekDay () öğesini çağırabilirsiniz;


7

@ L-Ray'in zaten önerdiği gibi moment.js'ye de bakabilirsiniz.

Örneklem

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

Ne yazık ki, Datejavascript'teki nesne aylar hakkında yalnızca sayısal biçimde bilgi verir. Yapabileceğiniz daha hızlı şey, bir ay dizisi oluşturmaktır (sık sık değişmemeleri gerekir!) Ve sayıya göre adı döndüren bir işlev oluşturmaktır.

Bunun gibi bir şey:

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

   return months[mm]; 
}

Bu nedenle kodunuz şu hale gelir:

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, en-US (Amerikan İngilizcesi için) veya en-GB (İngiliz İngilizcesi için) olacaktır.
Sarah


3

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

ToLocaleDateString () metodu bu tarih tarih kısmının dil duyarlı gösterimi ile bir dize döndürür. Yeni yerel ayarlar ve seçenekler bağımsız değişkenleri, uygulamaların biçimlendirme kurallarının kullanılması gereken dili belirlemesine ve işlevin davranışını özelleştirmesine izin verir. Yerel ayarlar ve seçenekler argümanlarını yok sayan eski uygulamalarda, kullanılan yerel ayar ve döndürülen dizenin biçimi tamamen uygulamaya bağlıdır.

Uzun biçim:

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

Tek astar:

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

Not: yerel ayarlar için başka dil seçenekleri de vardır, ancak burada ABD İngilizcesi için sunulan seçenek


2

Örneğin yerelleştirilmiş tarih çıktısını ayrıştıran datejs'ye bakabilirsiniz .

Örneğinizde biçimlendirme şöyle görünebilir:

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

1

Bu basit. Adları almak için toLocaleDateString () içinde yalnızca hafta günlerini görüntüleme seçeneğini ayarlayabilirsiniz. Örneğin:

(new Date ()). toLocaleDateString ('en-US', {weekday: 'long'}) yalnızca haftanın gününü döndürecektir. Ve (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) yalnızca yılın ayını döndürecektir.


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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.