我想根據一個古老的法語版本的一些修改,以創建一個新的日期/時間系統。
這涉及變換UTC日期/時間到新的數量:
- 12個月=>10個月
- 52周=>36.5周每月=> 36/37
- 28/31天每月天
- 24小時=>20小時
- 60分鐘=>100分鐘
- 60秒=>100秒
我編寫了一個時鐘在JavaScript作爲概念驗證,但不確定爲我是否已經正確地計算出一切,另外無論是最好的方法:
代碼
1)getDecimalDate ()計算一年中的某一天,然後計算出它在每月36或37天的新日曆中存在的月份。然後計算月份的新日期。
function getDecimalDate(date) {
var oldDay = 1000 * 60 * 60 * 24,
startYear = new Date(Date.UTC(date.getUTCFullYear(), 0, 0)),
day = Math.floor((date - startYear)/oldDay),
num = 0,
month = 1;
if (day > 36) { num += 36; month = 2; }
if (day > 73) { num += 37; month = 3; }
if (day > 109) { num += 36; month = 4; }
if (day > 146) { num += 37; month = 5; }
if (day > 182) { num += 36; month = 6; }
if (day > 219) { num += 37; month = 7; }
if (day > 255) { num += 36; month = 8; }
if (day > 292) { num += 37; month = 9; }
if (day > 328) { num += 36; month = 10; }
return { day: day - num, month: month, year: date.getUTCFullYear(), num: num };
}
2)getDecimalTime()計算自午夜起的毫秒數,然後每天從舊毫秒到新的總計更改它,然後計算小時,分鐘等
function getDecimalTime(date) {
var oldDay = 1000 * 60 * 60 * 24,
newDay = 1000 * 100 * 100 * 20,
startDay = new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())),
delta = ((date - startDay)/oldDay) * newDay;
var hours = Math.floor(delta/10000000) % 20;
delta -= hours * 10000000;
var minutes = Math.floor(delta/100000) % 100;
delta -= minutes * 100000;
var seconds = Math.floor(delta/1000) % 100;
delta -= seconds * 1000;
var milliseconds = Math.floor(delta) % 1000;
return { milliseconds: milliseconds, seconds: seconds, minutes: minutes, hours: hours };
}
你可以看到一個工作在此版本: https://jsfiddle.net/kmturley/7mrwc3x3/9/
結果
請記住我已經決定了日/月使用拉丁文學名(月= 9,模具=日,DEC = 10,mense =月)
- 字符串 - 週六12月3日=> Novdie Decmense 10
- 日期 - 2016年3月12日=> 2016年10月10日
- 時間 - 22點47分52秒=> 18:98:43
問題
- 是數學正確嗎?
- 時區有問題嗎?我 試圖將所有日期對象轉換爲UTC,但JavaScript可以是 棘手
- 我可以改進代碼嗎?該月的選擇似乎可以改善,但我無法找出一個更好的方法來計算36 和37天的月份。如果(num%36.5 === 1)不起作用?
謝謝!
更新 - 2016年12月7日 - 新版本的基礎上的解決方案: https://jsfiddle.net/kmturley/7mrwc3x3/10/
https://github.com/kmturley/decimal-time
'是否有任何與時區的問題是什麼?我試過將所有的Date對象轉換爲UTC,但JavaScript可能會很棘手......好吧,時區並不比偏移複雜,所以我個人會保留這些函數的UTC位。 – Keith
所有日期對象**都是** UTC。時區偏移量來自主機,非UTC方法使用該偏移量來計算「本地」值。如果您使用所有UTC方法,那麼您將得到UTC值,並且不使用時區偏移。 – RobG
好點,我有一些不必要的代碼轉換UTC到UTC有:) –