Đây không phải là vấn đề cụ thể về Moment.js; điều tương tự cũng xảy ra nếu bạn cố gắng khởi tạo đối tượng Date()
với chuỗi bạn đang sử dụng. Nếu bạn tạo nó như là một đối tượng Date()
đầu tiên và tự gán năm sử dụng setYear()
nó chấp nhận một ngày -700
:
var date = new Date();
date.setYear(-700);
moment(date).year();
> -700
Tuy nhiên như Niels Keurentjes has pointed out, tính toán ngày này xa trở lại nhận được khá phức tạp và có thể không ở tất cả đáng tin cậy.
Nếu bạn muốn "-700-01-01" bạn có thể cấu hình các năm, tháng và ngày riêng biệt:
date.setYear(-700);
date.setMonth(0);
date.setDate(1);
console.log(date);
> Fri Jan 01 -700 11:53:57 GMT+0000 (GMT Standard Time)
Là để cho dù ngày ngày 1 tháng 1 năm 700BC đã thực sự một thứ sáu ... bạn sẽ phải tự mình tìm kiếm.
Nguồn
2014-09-15 10:50:21
Như một quy tắc chung, bạn không nên muốn điều này. Các tính toán ngày nay từ lâu sẽ trở nên vô cùng lộn xộn, và sai, theo định nghĩa, bởi vì lịch Gregorian chính nó không được chuẩn hóa trở lại sau đó. Tóm lại: không bao giờ có 'ngày 1 tháng 1' theo logic lịch của Moment.js, trong 700BC lịch duy nhất thỉnh thoảng được sử dụng là [Lịch của Numa] (http://en.wikipedia.org/wiki/ Roman_calendar # Calendar_of_Numa) tính 355 ngày mỗi năm. Lịch Gregorian không đáng tin cậy từ xa cho đến 1752AD. –
có một số lý do tại sao thực sự làm điều này - có thể người dùng cần trình bày một số dữ liệu trên dòng thời gian được tạo bởi công cụ javascript "usuall" và do đó yêu cầu này hoàn toàn hợp lệ. Không ai nghi ngờ rằng ngày BC không đáng tin cậy, khi nói đến ngày trong tuần hoặc lâu hơn, nhưng vẫn cần phải có cách để làm điều đó. Thế giới đã không bắt đầu trên 1.1.1970 ... :) – Radek