[英]How do I convert a decimal year value into a Date in Javascript?
好的,這基本上是一個Javascript版本如何將十進制年份值轉換為Ruby中的日期? 並且不完全是Javascript函數的重復, 以將十進制年份值轉換為年,月和日
輸入:
2015.0596924
期望的輸出:
2015年1月22日
我已經解決了它(見下文),但我希望(就像這個問題的Ruby版本)有更好的方法。
如果您添加太多時間,JavaScript將為您解決日期。 見下面的演示。 下面的解決方案不會根據算法計算閏年,而是采用明年的日期並從今年開始減去它。 這假設JavaScript規范正確計算閏年。
有關詳細信息,請參閱Mozilla Docs 。
function decimalDateToJsDate(time) { var year = Math.floor(time); var thisYear = new Date(year, 0, 1); var nextYear = new Date(year + 1, 0, 1); var millisecondsInYear = nextYear.getTime() - thisYear.getTime(); var deltaTime = Math.ceil((time - year) * millisecondsInYear); thisYear.setMilliseconds(deltaTime); return thisYear; } document.getElementById("output").innerHTML = decimalDateToJsDate(2015.0596924);
<pre id="output"></pre>
另一種解決方案是:
date
(整數部分) 在腳本中:
function leapYear(year) { return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0); }; function convertDecimalDate(decimalDate) { var year = parseInt(decimalDate); var reminder = decimalDate - year; var daysPerYear = leapYear(year) ? 366 : 365; var miliseconds = reminder * daysPerYear * 24 * 60 * 60 * 1000; var yearDate = new Date(year, 0, 1); return new Date(yearDate.getTime() + miliseconds); } var date = convertDecimalDate(2015.0596924); console.log(date);
你可以在這個小提琴上玩它。
function leapYear (year){
return ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
}
function getMonthAndDayFromDayOfYear(dayOfYear, year){
var daysInMonthArray = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
if (leapYear(year)) { daysInMonthArray[2] = 29; }
var daysLeft = dayOfYear;
var month = 0;
for (i=0; i<daysInMonthArray.length; i++) {
var daysInThisMonth = daysInMonthArray[i];
if (daysLeft > daysInThisMonth) {
month += 1;
daysLeft -= daysInThisMonth;
} else {
break;
}
}
return { month: month, day: daysLeft };
}
function convertDecimalDate(decimalDate){
decimalDate = parseFloat(decimalDate);
var year = parseInt(decimalDate); // Get just the integer part for the year
var daysPerYear = leapYear(year) ? 366 : 365; // Set days per year based on leap year or not
var decimalYear = decimalDate - year; // A decimal representing portion of the year left
var dayOfYear = Math.ceil(decimalYear * daysPerYear); // day of Year: 1 to 355 (or 366)
var md = getMonthAndDayFromDayOfYear(dayOfYear, year);
var day = md['day'];
var month = md['month'];
return new Date(year,month,day);
}
var date = convertDecimalDate(2015.0596924);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.