Bagaimana cara mendapatkan hari dalam seminggu dan bulan dalam setahun?


124

Saya tidak tahu banyak tentang Javascript, dan pertanyaan lain yang saya temukan terkait dengan operasi pada tanggal, tidak hanya mendapatkan informasi yang saya butuhkan.

Objektif

Saya ingin mendapatkan tanggal seperti di bawah ini:

Dicetak pada hari Kamis, 27 Januari 2011 pukul 17:42:21

Sejauh ini, saya mendapatkan yang berikut:

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;

Sekarang saya perlu tahu bagaimana mendapatkan hari dalam seminggu dan bulan dalam setahun (nama mereka).

Apakah ada cara sederhana untuk membuatnya, atau haruskah saya mempertimbangkan menggunakan array di mana saya hanya akan mengindeks ke nilai yang benar menggunakan now.getMonth()dan now.getDay()?

Jawaban:


233

Ya, Anda membutuhkan array.

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

Atau Anda dapat menggunakan perpustakaan date.js.


EDIT:

Jika Anda akan sering menggunakannya, Anda mungkin ingin memperluas Date.prototypeaksesibilitas.

(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
@ Akan: Sama-sama. FYI, jika Anda akan sering melakukan ini, Anda dapat dengan mudah membuat prototipe fungsionalitas ke dalam Dateobjek. Saya akan memperbarui sebentar lagi.
pengguna113716

3
Lokalkan data Anda dan tidak perlu array hanya satu bahasa! selectedLocale = 'en-us'; selectedDate.toLocaleString (selectedLocale, {month: "long"});
Ryan Loggerythm

Saya melakukan ini sekarang tetapi harus menggunakan Monday sebagai elemen pertama dalam array, bukan Sunday. Tetap saja, bekerja dengan baik.
nrowegt

4
Tidak tidak tidak tidak. Cukup gunakan kelas Tanggal javascript standar. Tidak perlu array atau perpustakaan tambahan. Lihat jawaban saya: stackoverflow.com/a/50293232/760777
RWC

52

Gunakan kelas Tanggal javascript standar. Tidak perlu array. Tidak perlu perpustakaan tambahan.

Lihat 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 ini bagus, tapi bagaimana cara saya mengatur untuk mendapatkan hanya hari kerja tanpa sisa bagian tanggal? IE yang saya inginkan, saturdaybukan saturday, 9th february 2019.
Vladimir Nul

4
@Valdimir Nul: var prnDt = 'Dicetak pada' + Tanggal baru (). ToLocaleDateString ('en-us', {hari kerja: 'long'}); console.log (prnDt);
RWC

Jelas cara terbaik untuk melakukannya.
Diego Victor de Jesus

@Vladimir Ada masalah dengan Firefox, waktu selalu ditampilkan, maka:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.

8

Satu hal yang juga dapat Anda lakukan adalah Perpanjang objek tanggal untuk mengembalikan Hari Kerja dengan:

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

jadi, Anda hanya dapat memanggil date.getWeekDay ();


7

Sebagai @ L-Ray telah disarankan, Anda dapat melihat ke dalam moment.js juga

Sampel

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

Sayangnya, Dateobjek dalam javascript mengembalikan informasi tentang bulan hanya dalam format numerik. Hal yang lebih cepat yang dapat Anda lakukan adalah membuat array bulan (tidak seharusnya sering berubah!) Dan membuat fungsi yang mengembalikan nama berdasarkan nomor.

Sesuatu seperti ini:

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

   return months[mm]; 
}

Oleh karena itu, kode Anda menjadi:

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 akan menjadi en-US (untuk bahasa Inggris Amerika) atau en-GB (untuk bahasa Inggris British).
Sarah


3

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

Metode toLocaleDateString () mengembalikan string dengan representasi sensitif bahasa dari bagian tanggal tanggal ini. Argumen lokal dan opsi baru memungkinkan aplikasi menentukan bahasa yang konvensi pemformatannya harus digunakan dan memungkinkan untuk menyesuaikan perilaku fungsi. Dalam implementasi lama, yang mengabaikan argumen lokal dan opsi, lokal yang digunakan dan bentuk string yang dikembalikan sepenuhnya bergantung pada implementasi.

Bentuk panjang:

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

Satu liner:

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

Catatan: ada pilihan bahasa lain untuk lokal, tapi yang disajikan di sini untuk Bahasa Inggris AS


2

Anda dapat melihat datejs yang mengurai keluaran tanggal yang dilokalkan misalnya.

Formatnya mungkin terlihat seperti ini, dalam contoh Anda:

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

1

Itu sederhana. Anda dapat menyetel opsi untuk hanya menampilkan hari kerja di toLocaleDateString () untuk mendapatkan nama. Sebagai contoh:

(new Date ()). toLocaleDateString ('en-US', {weekday: 'long'}) hanya akan mengembalikan hari dalam seminggu. Dan (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) hanya akan mengembalikan bulan dalam setahun.


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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.