Tôi không cần ngày chứa giây hoặc mili giây.
Lưu ý rằng lịch Gregory di chuyển theo chu kỳ 400 năm, do đó theo chu kỳ 240.000 năm. Do đó, bạn có thể lấy đại diện 60000 mili giây Date
mà bạn không muốn sử dụng, quay ngược lại trong chu kỳ 240000 năm (lên đến 60000 chu kỳ như vậy). Điều này có thể đưa bạn đến khoảng năm 14,4 tỷ trước Công nguyên (ngay trước Big Bang :)), với độ phân giải chỉ vài phút.
Ví dụ sau không xem xét tất cả các chức năng của đối tượng Date. Tuy nhiên, với việc triển khai thêm, tôi tin rằng có thể có chức năng tương tự. Ví dụ: một BigDate,, x
lớn hơn một BigDate khác y
, nếu cả hai ngày đều AC
và x.original > y.original
hoặc nếu x.isAC()
nhưng !y.isAC()
, hoặc nếu cả hai ngày đều BC
như vậy hoặc x.getFullYear() < y.getFullYear()
hoặc x.getFullYear() === y.getFullYear() && x.original > y.original
.
Sử dụng BigDate:
var time = new Date (
[year ],
[month ],
[day of month ],
[hours ],
[minutes ],
[a factor of 240,000,000 years to go back (from the first parameter year) ],
[a factor of 240,000 years to go back (from the first parameter year) ]);
var bigDate = new BigDate(time);
HTML
<span id="years"></span>
<span id="months"></span>
<span id="date"></span>
<span id="hours"></span>
<span id="minutes"></span>
<span id="acbc"></span>
JAVASCRIPT
function BigDate (date) { this.original = date; }
BigDate.prototype.getMinutes = function () { return this.original.getMinutes(); }
BigDate.prototype.getHours = function () { return this.original.getHours(); }
BigDate.prototype.getDate = function () { return this.original.getDate(); }
BigDate.prototype.getMonth = function () { return this.original.getMonth(); }
Và đây là thịt:
BigDate.prototype.getFullYear = function () {
var ms = this.original.getSeconds() * 1000 + this.original.getMilliseconds();
if (ms === 0) return this.original.getFullYear();
else return (ms * 240000) - this.original.getFullYear();
}
BigDate.prototype.isAC = function () {
var result = this.original.getSeconds() === 0 &&
this.original.getMilliseconds() === 0;
return result;
}
Một số bản demo (cũng có thể được sử dụng để sản xuất BigDate.prototype.toString()
, v.v.):
var years = document.getElementById("years");
var months = document.getElementById("months");
var date = document.getElementById("date");
var hours = document.getElementById("hours");
var minutes = document.getElementById("minutes");
var acbc = document.getElementById("acbc");
var time = new Date (2016, 1, 28, 8, 21, 20, 200);
var bigDate = new BigDate(time);
var monthsName = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
years.innerHTML = bigDate.getFullYear();
months.innerHTML = monthsName[bigDate.getMonth()];
date.innerHTML = bigDate.getDate();
hours.innerHTML = bigDate.getHours() + ":";
minutes.innerHTML = bigDate.getMinutes();
acbc.innerHTML = (bigDate.isAC()) ? "AC":"BC";
Nội dung kết quả sẽ là: 4847996014 Jan 28 8: 21 BC
Đây là một JSFiddle .
Làm rõ
Về các nhận xét thiết kế (hợp lý), tôi biết rằng BigDate
đối tượng được trình bày ở trên có giao diện và thiết kế kém. Đối tượng chỉ được trình bày như một ví dụ về việc sử dụng thông tin chưa được sử dụng của giây và mili giây để thỏa mãn câu hỏi. Tôi hy vọng ví dụ này giúp hiểu kỹ thuật.