2015-12-09 38 views
5

Tôi đang cố gắng lấy ngày đầu tiên và cuối cùng của tháng hiện tại bằng cách sử dụng Node.js.Làm thế nào để có được ngày đầu tiên của tháng hiện tại trong Node.js?

Tiếp theo mã đang làm việc một cách hoàn hảo trong trình duyệt (Chrome):

var date = new Date(), y = date.getFullYear(), m = date.getMonth(); 
var firstDay = new Date(y, m, 1); 
var lastDay = new Date(y, m + 1, 0); 

console.log(firstDay); 
console.log(lastDay); 

Nhưng nó cho thấy một kết quả khác nhau trong Node.js. Làm thế nào tôi có thể sửa chữa nó?

+2

các kết quả khác nhau là gì? đăng kết quả cho trình duyệt/nodejs – shennan

+1

[This] (http://stackoverflow.com/questions/7481963/how-come-my-javascript-node-js-is-giving-me-the-incorrect-timestamp) có thể hữu ích. –

+0

Trong trình duyệt Thứ Ba ngày 01 tháng 12 năm 2015 00:00:00 GMT + 05:30 (IST) Ngày 31 tháng 12 năm 2015 00:00:00 GMT + 0530 (IST) Trong nút js 2015-11-30T18: 30: 00.000Z - 2015-12-30T18: 30: 00.000Z –

Trả lời

3

Thay đổi đối tượng bẩm sinh Date trong câu trả lời được chấp nhận là xấu thực hành; không làm điều đó (https://stackoverflow.com/a/8859896/3929494)

Bạn nên sử dụng moment.js để cung cấp cho bạn môi trường nhất quán để xử lý ngày trong JavaScript giữa node.js và tất cả các trình duyệt - xem nó dưới dạng lớp trừu tượng. http://momentjs.com/ - nó khá dễ sử dụng.

Một ví dụ rất giống nhau là ở đây: https://stackoverflow.com/a/26131085/3929494

Bạn có thể thử nó trên mạng tại https://tonicdev.com/jadaradix/momentjs

+0

Tôi không nghĩ rằng ai * cần * sử dụng moment.js để có được tính nhất quán trong đầu ra Ngày giữa hai môi trường JS. Bạn đã không giải thích lý do tại sao OP có sự khác biệt về đầu ra ngày – shennan

+0

Tôi đã thay đổi "cần" thành "nên". Sử dụng các phương thức như 'endOf' sẽ làm mất rất nhiều bản mẫu. một thư viện như moment.js sẽ chăm sóc.Đó là một chiến thắng rõ ràng khi bạn phải đối phó với quốc tế hóa là tốt.Tôi không biết tại sao có một sự khác biệt, tôi nghĩ rằng quan điểm của tôi là sử dụng moment.js sẽ loại bỏ tất cả có thể –

+1

Tôi không làm mất uy tín moment.js như là một sự trừu tượng tốt, tôi chỉ nói rằng bản thân moment.js không phải là câu trả lời cho vấn đề cụ thể mà nó có thể giúp đỡ như một người giải quyết vấn đề chăn nhưng nó không giáo dục bất kỳ ai trên sự khác biệt giữa NodeJS và thời gian trình duyệt. Tôi sẽ +1 vì nó tốt hơn so với câu trả lời trị vì hiện tại. – shennan

-2

Nhìn vào mã

<html> 
<head> 
    <title>Please Rate if it helps</title> 
    <script> 
     Date.prototype.getMonthStartEnd = function (start) { 
      var StartDate = new Date(this.getFullYear(), this.getMonth(), 1); 
      var EndDate = new Date(this.getFullYear(), this.getMonth() + 1, 0); 
      return [StartDate, EndDate]; 
     } 
     window.onload = function() { 
      document.write(new Date().getMonthStartEnd()); 
     } 
    </script> 
</head> 
<body> 
</body> 
</html> 
+0

Làm cách nào để tôi có thể thay đổi Định dạng thành DD/MM/YYYY? –

+0

Câu trả lời này phải giúp như thế nào? Nó không giải quyết sự khác biệt giữa NodeJS và trình duyệt mà OP tuyên bố đã thấy ... – shennan

+0

Tôi không phải là lập trình viên chuyên nghiệp trong nút hoặc javascript, Mã này cho tôi chính xác những gì tôi muốn. –

0

Sản lượng trình duyệt đang hiển thị ngày trong múi giờ hiện tại, Node.js được hiển thị giờ GMT ngày/Múi giờ Zulu.

(Chỉnh sửa: Đã thêm mã). Một cái gì đó như thế này

var offset = (new Date().getTimezoneOffset()/60) * -1; 
var d = new Date(); 
var tmpDate = new Date(d.getTime()+offset); 
var y = tmpDate.getFullYear(); 
var m = tmpDate.getMonth(); 
var firstDay = new Date(y, m, 1); 
var lastDay = new Date(y, m + 1, 0); 

console.log(tmpDate.toString()); 
console.log(firstDay.toString()); 
console.log(lastDay.toString()); 
+0

Bạn có thể chia sẻ mã mẫu không? nếu có cách giải quyết –

Các vấn đề liên quan