Мені не потрібно, щоб дати містили секунди або мілісекунди.
Зверніть увагу, що григоріанський календар рухається циклами 400 років, отже, циклами 240 000 років. Тому ви можете взяти представлення 60000 мілісекунд Date, яке ви не хочете використовувати, щоб повернутися назад у 240000-річні цикли (до 60000 таких циклів). Це може затягнути вас приблизно на 14,4 мільярда років до нашої ери (безпосередньо перед Великим вибухом :)) з мінімальним дозволом.
Наступний приклад не бере до уваги всю функціональність об'єкта Date. Однак при подальшому впровадженні, я вважаю, можливо мати подібну функціональність. Наприклад, один BigDate, xє більше , ніж інший BigDate, yякщо обидві дати ACі x.original > y.originalчи x.isAC()але !y.isAC(), або , якщо обидві дати BC, що або x.getFullYear() < y.getFullYear()або x.getFullYear() === y.getFullYear() && x.original > y.original.
Використання 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>
ЯВАСКРИПТ
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(); }
І ось м’ясо:
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;
}
Деякі демонстраційні програми (також можуть бути використані для створення BigDate.prototype.toString()тощо):
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";
Отриманий вміст буде таким: 4847996014 Jan 28 8: 21 BC
Ось JSFiddle .
Уточнення
Щодо (виправданих) зауважень до дизайну, мені відомо, що BigDateпредставлений вище об’єкт виявляє поганий інтерфейс та дизайн. Об'єкт представлений лише як приклад споживання невикористаної інформації секунд і мілісекунд для задоволення питання. Сподіваюся, цей приклад допоможе зрозуміти техніку.