2011-12-01 29 views

Trả lời

9

Không, đây là cách khác xung quanh: bạn đang xác định ngày tháng như tháng 1.

Xem the documentation on Date():

tháng - Giá trị số nguyên đại diện cho tháng, bắt đầu với 0 cho tháng giêng đến 11 cho tháng mười hai.

Bạn cung cấp 12, vì vậy nó được coi là 0 (tháng 1).

Nếu bạn cần số bằng chứng, hãy xem modified version of the script, showing the whole date and time.

+0

Cảm ơn !!! OMG Tôi là một kẻ chậm chạp, ngoài ra, tôi đã nhận thấy sự thay đổi của nó vào ngày 24 thay vì ngày 25 là nguyên nhân gây ra dấu thời gian là 00:00? – Baconbeastnz

+0

@Baconbeastnz: Tôi tin rằng vấn đề cụ thể này là kết quả của những điều sau đây: bạn đang tạo ngày vì nó là giờ địa phương, nhưng bạn đang xuất ra ngày UTC. Xem [kết quả chi tiết cho cả UTC và giờ địa phương với số giờ được bao gồm] (http://jsfiddle.net/3CpXz/12/). Nó có giúp gì không? – Tadeck

+0

@Baconbeastnz: Về cơ bản bạn đang ở đâu đó ở bán cầu đông và vì thời gian đó UTC thực sự là sớm hơn (nếu bạn có thể nói điều đó). – Tadeck

2

Tháng 12 là 11 trong đối tượng ngày. Bạn sẽ phải trừ 1 để làm cho nó được lập chỉ mục 0. bạn

http://www.w3schools.com/jsref/jsref_getutcmonth.asp

+2

Tôi sẽ upvote câu trả lời của bạn, vì nó điểm OP đúng hướng (như @ Gabe của câu trả lời và của tôi), nhưng tôi sẽ không làm điều đó vì nguồn thông tin bạn tham chiếu. Vui lòng xem [W3Fools.com] (http://w3fools.com/) để biết giải thích chi tiết và lý do. – Tadeck

+0

Nó vẫn chính xác: P – jzila

+0

Không, nó không phải là, tôi tin :) Xem [Date object docs] (http://www.w3schools.com/jsref/jsref_obj_date.asp) và [JS Date object tutorial] (http: //www.w3schools.com/js/js_obj_date.asp) - ** none ** trong số chúng thực sự đề cập đến 'new Date()' sẽ được cung cấp số tháng bắt đầu bằng '0' cho tháng 1 (và' 11' cho tháng 12). Liên kết bạn đã cung cấp chỉ đề cập đến các giá trị chính xác cho 'getUTCMonth()', không chỉ cho hàm tạo của đối tượng Date. Liên kết đó thậm chí còn có 'var month = new Array (12);' trong ví dụ của nó, đó không phải là một thực hành tốt. W3Schools có đầy đủ các điểm không chính xác: ( – Tadeck

7

đã nhận thấy rằng nó in 2012 trong năm? Vấn đề là nó sử dụng một tháng dựa trên 0, do đó, nó nghĩ rằng tháng 12 năm nay thực sự là tháng thứ 0 của năm tiếp theo. Nói cách khác, 0 là tháng 1 và 11 là tháng 12, vì vậy 12 là tháng 1 tới.

Bạn cần phải trừ đi 1 so với tháng con người có thể đọc được:

var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 

Nếu tôi thay đổi chương trình như thế này:

var exploded = "2011-12-25".split('-'); 
var d = new Date(exploded[0], exploded[1] - 1, exploded[2]); 
document.write(d.toString()); 

It in: Sun Dec 25 00:00:00 EST 2011

+0

thats return year2011 month11 day24 đó là sai lầm là tốt:/ – Baconbeastnz

+0

infact nếu tôi sửa đổi nó http://jsfiddle.net/3CpXz/, thậm chí chỉ toString() là không – Baconbeastnz

+1

@Baconbeastnz Đó là vì 'getUTCMonth 'cũng là 0-11. Hãy thử:' "tháng" + (d.getUTCMonth() + 1) ' –