Làm thế nào để có được ngày trong tuần và tháng trong năm?


124

Tôi không biết nhiều về Javascript và các câu hỏi khác mà tôi tìm thấy liên quan đến các hoạt động vào ngày tháng, không chỉ lấy thông tin khi tôi cần.

Mục tiêu

Tôi muốn lấy ngày như định dạng bên dưới:

Được in vào thứ năm, 27 tháng 1 năm 2011 lúc 17:42:21

Cho đến nay, tôi nhận được những điều sau:

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;

Bây giờ tôi cần biết cách lấy ngày trong tuần và tháng trong năm (tên của họ).

Có cách nào đơn giản để thực hiện nó không, hay tôi sẽ cân nhắc sử dụng các mảng mà tôi chỉ cần lập chỉ mục đến đúng giá trị bằng cách sử dụng now.getMonth()now.getDay()?

Câu trả lời:


233

Có, bạn sẽ cần các mảng.

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

Hoặc bạn có thể sử dụng thư viện date.js.


BIÊN TẬP:

Nếu bạn định sử dụng những thứ này thường xuyên, bạn có thể muốn mở rộng Date.prototypekhả năng truy cập.

(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: Không có chi. FYI, nếu bạn định làm việc này thường xuyên, bạn có thể dễ dàng tạo nguyên mẫu chức năng vào Dateđối tượng. Tôi sẽ cập nhật trong một phút.
dùng113716

3
Bản địa hóa dữ liệu của bạn và không cần mảng chỉ một ngôn ngữ! selectLocale = 'en-us'; selectDate.toLocaleString (selectLocale, {month: "long"});
Ryan Loggerythm

Tôi đã làm điều này ngay bây giờ nhưng phải sử dụng Thứ Hai làm phần tử đầu tiên trong mảng, không phải Chủ Nhật. Tuy nhiên, hoạt động tuyệt vời.
nrowegt

4
Không, không, không, không. Chỉ cần sử dụng lớp Ngày của javascript tiêu chuẩn. Không cần mảng hoặc thư viện bổ sung. Xem câu trả lời của tôi: stackoverflow.com/a/50293232/760777
RWC

52

Sử dụng lớp Ngày của javascript tiêu chuẩn. Không cần mảng. Không cần thêm thư viện.

Xem 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 cái này hay đấy, nhưng làm cách nào để tôi chỉ nhận được ngày trong tuần mà không có phần còn lại của ngày? IE tôi muốn saturdaythay vì saturday, 9th february 2019.
Vladimir Nul

4
@Valdimir Nul: var prnDt = 'In trên' + new Date (). ToLocaleDateString ('en-us', {weekday: 'long'}); console.log (prnDt);
RWC

Chắc chắn là cách tốt nhất để làm điều đó.
Diego Victor de Jesus

@Vladimir Có một vấn đề với Firefox, thời gian luôn hiển thị, sau đó:new Date().toLocaleTimeString(language, { weekday: 'long'}).split(' ')[0]
Bruno L.

8

Một điều bạn cũng có thể làm là Mở rộng đối tượng ngày để trả về Ngày trong tuần bằng cách:

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

vì vậy, bạn chỉ có thể gọi date.getWeekDay ();


7

Như @ L-Ray đã gợi ý, bạn có thể nhìn vào moment.js cũng

Mẫu vật

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

Thật không may, Dateđối tượng trong javascript chỉ trả về thông tin về tháng ở định dạng số. Điều nhanh hơn bạn có thể làm là tạo một mảng tháng (chúng không được phép thay đổi thường xuyên!) Và tạo một hàm trả về tên dựa trên số.

Một cái gì đó như thế này:

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

   return months[mm]; 
}

Do đó, mã của bạn trở thành:

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 sẽ là en-US (cho tiếng Anh Mỹ) hoặc en-GB (cho tiếng Anh Anh).
Sarah


3

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

Các toLocaleDateString () trả về một chuỗi có biểu diễn nhạy cảm với ngôn ngữ của phần ngày của ngày này. Các ngôn ngữ và đối số tùy chọn mới cho phép các ứng dụng chỉ định ngôn ngữ mà các quy ước định dạng sẽ được sử dụng và cho phép tùy chỉnh hành vi của hàm. Trong các triển khai cũ hơn, bỏ qua các đối số ngôn ngữ và tùy chọn, ngôn ngữ được sử dụng và dạng chuỗi được trả về hoàn toàn phụ thuộc vào việc triển khai.

Dạng dài:

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

Lót:

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

Lưu ý: có các tùy chọn ngôn ngữ khác cho ngôn ngữ, nhưng tùy chọn được trình bày ở đây cho tiếng Anh Mỹ


2

Bạn có thể xem datejs phân tích cú pháp đầu ra ngày được bản địa hóa chẳng hạn.

Định dạng có thể trông giống như thế này, trong ví dụ của bạn:

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

1

Đơn giản vậy thôi. Bạn có thể đặt tùy chọn chỉ hiển thị ngày trong tuần trong toLocaleDateString () để lấy tên. Ví dụ:

(new Date ()). toLocaleDateString ('en-US', {weekday: 'long'}) sẽ chỉ trả về ngày trong tuần. Và (new Date ()). ToLocaleDateString ('en-US', {month: 'long'}) sẽ chỉ trả về tháng trong năm.


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

-1

Viết Date = document.write (Date ());


Làm thế nào đây là giải pháp cho vấn đề của OP?
Anees
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.