我的计划是根据当前本地时间(来自javascript)对网页进行微调。我不需要像当前流明或任何东西那样具体的东西,但我想得到峰值阳光、日出、日落和午夜的大致时间+-2小时左右;经度和时区数据,我可能可以访问这些数据。但首先,我想知道是否只有一个公式来计算北半球和当前当地时间。
f.lux是怎么做到的?
更新1:我的大多数搜索都只返回了与夏令时相关的信息,这没有太大帮助。我确实找到了这个JS:http://www.esrl.noaa.gov/gmd/grad/solcalc/main.js(从这里http://www.esrl.noaa.gov/gmd/grad/solcalc/)但它充满了无法解释的神奇常数。例如:
function calcGeomMeanLongSun(t)
{
var L0 = 280.46646 + t * (36000.76983 + t*(0.0003032))
while(L0 > 360.0)
{
L0 -= 360.0
}
while(L0 < 0.0)
{
L0 += 360.0
}
return L0 // in degrees
}
function calcGeomMeanAnomalySun(t)
{
var M = 357.52911 + t * (35999.05029 - 0.0001537 * t);
return M; // in degrees
}
function calcEccentricityEarthOrbit(t)
{
var e = 0.016708634 - t * (0.000042037 + 0.0000001267 * t);
return e; // unitless
}
更新2:我认为通过gps或其他方式确定用户区域设置的"成本"太高了(尤其是因为这纯粹是出于表面原因,没有其他功能目的),所以我可能只会坚持通过javascript确定当地时间的12am-6am-12pm-6pm周期。
更新3:我只是用了一个稍微修改过的正弦波,对白天的时间有点偏好:
var x, fx, hour,
// starting hsl value for midnight:
h = 220,
s = 42,
l = 75;
for (hour = 0; hour < 24; hour++) {
// 0 for midnight, up to 12 for noon
x = 12 - Math.abs(hour - 12);
// 0.0 to 1.0
fx = x / 12;
// factor of pi, shift x axis by 1 half pi
fx = (Math.PI * (fx - (1 / 2)));
// sine function
fx = Math.sin(fx);
// +1 to start at 0, take half to max out at one
fx = (fx + 1) / 2;
// skew the values just slightly for daytime
fx = Math.pow(fx, 0.75);
// change range back to top out at 12
fx = fx * 12;
// base of 220 degrees, 18.25 provided a nice color rage from bluish to yellowish
h = Math.floor((220 + (18.25 * fx)));
// rotate on 360 degrees
while (h >= 360) {
h = h - 360;
}
// base of 42% saturated, multiplied x for a linear slope up to 100%
s = Math.floor(42 + (5.5 * x));
// 100 max
if (s > 100) {
s = 100;
}
// base of 75% lightness, 1.85 factor was a nice linear slope stopping short of 100%
l = Math.floor(75 + (1.85 * x));
// 100 max
if (l > 100) {
l = 100;
}
// "style='background-color: hsl(" + h + ", " + s + "%, " + l + "%);'"
}
这是在JSBin上。我可能会在未来尝试获得实际金额,但这让我现在已经足够接近了。
维基百科上的这个等式还不够吗:
http://en.wikipedia.org/wiki/Sunrise_equation
这里面没有魔法,只有一点数学。
还是你需要更多的东西?