Javascript编码:输入特定日期,输出季节

| 您好,我是Java语言的一个新手,我需要编写一个允许某人输入日期的代码,这将导致该日期所在的季节。我不知所措,如果要声明的话?就我所知,谢谢大家的时间!
<body>
<h1>Date to Season</h1>
<p align=\"left\">Enter Date:
<input id=\"season\" maxlength=\"4\" size=\"24\"/>
</p>
<input type=\"button\" value=\"Submit\" onclick=\"Submit()\"/><br/>
<textarea cols=\"40\" rows=\"3\" id=\"output\"></textarea></body>

<script type=\"text/javascript\">
function Submit(){
var date = document.getElementById(\'season\').value;
var seasons = 

if (
    
已邀请:
请注意,有一些更合理的方法(例如,使用日期对象),这可能会更有用/更灵活,尤其是如果您想确定实际的季节开始/结束日期(例如3月28日) )。这仅仅是为了展示一个起点。 这是一个非常简单的示例,使用swtich()根据数字月份返回季节: http://jsfiddle.net/RtC58/
<form name=\"date\">
 <input type=\"text\" name=\"month\"/>
 <input type=\"button\" value=\"Season?\" onClick=\"getSeason()\"/>
</form>

function getSeason() {
    month = document.forms.date.month.value;
    season = \'\';
    switch(month) {
        case \'12\':
        case \'1\':
        case \'2\':
            season = \'winter\';
        break;
        case \'3\':
        case \'4\':
        case \'5\':
            season = \'spring\';
        break;
        case \'6\':
        case \'7\':
        case \'8\':
            season = \'summer\';
        break;
        case \'9\':
        case \'10\': 
        case \'11\':
            season = \'fall\';
        break;
    }
    alert(season);
}
这是一个更复杂的示例,其中显示了短/长月份以及数字月份。 http://jsfiddle.net/RtC58/1/
function getSeason() {
    month = document.forms.date.month.value.toLowerCase();
    season = \'unknown\';
    switch(month) {
        case \'dec\':
        case \'december\':
        case \'12\':
        case \'jan\':
        case \'january\':
        case \'1\':
        case \'feb\':
        case \'february\':
        case \'2\':
            season = \'winter\';
        break;
        case \'mar\':
        case \'march\':
        case \'3\':
        case \'apr\':
        case \'april\':
        case \'4\':
        case \'may\':
        case \'5\':
            season = \'spring\';
        break;
        case \'jun\':
        case \'june\':
        case \'6\':
        case \'jul\':
        case \'july\':
        case \'7\':
        case \'aug\':
        case \'august\':
        case \'8\':
            season = \'summer\';
        break;
        case \'sep\':
        case \'september\':
        case \'9\':
        case \'oct\':
        case \'october\':
        case \'10\':
        case \'nov\':
        case \'november\':
        case \'11\':
            season = \'fall\';
        break;
    }
    alert(season);
}
稍微不同的方法可能是为季节创建变量,使用if / else语句(如OP所需要的示例),并在其中一个变量中找到月份值的“索引”(请注意,我添加了一个ѭ3[逗号]到月底,以消除歧义1的12和1的0的歧义,等等。) http://jsfiddle.net/RtC58/3/
function getSeason() {
    month = document.forms.date.month.value.toLowerCase()+\",\";
    winter = \'dec,december,jan,january,feb,february,12,1,2,\';
    spring = \'mar,march,apr,april,may,3,4,5,\';
    summer = \'jun,june,jul,july,aug,august,6,7,8,\';
    fall = \'sep,september,oct,october,nov,november,9,10,11,\';
    season = \'unknown\';
    if (winter.indexOf(month) != -1) {
        season = \'winter\';
    } else if (spring.indexOf(month) != -1) {
        season = \'spring\';
    } else if (summer.indexOf(month) != -1) {
        season = \'summer\';
    } else if (fall.indexOf(month) != -1) {
        season = \'fall\';
    }
    alert(season);
}
    
毫无疑问,算算算术和春分并不是您想要的,但是它们并不是太困难。 与某些人所说的相反,solsoltices和Equinoxes并不取决于您的位置,尽管它们的名字do冬天-世界上一半的人都将之称为夏天。
Date.fromJulian= function(j){
    j= (+j)+(30.0/(24*60*60));
    var A= Date.julianArray(j, true);
    return new Date(Date.UTC.apply(Date, A));
}
Date.julianArray= function(j, n){
    var F= Math.floor;
    var j2, JA, a, b, c, d, e, f, g, h, z;
    j+= .5;
    j2= (j-F(j))*86400.0;
    z= F(j);
    f= j-z;
    if(z< 2299161) a= z;
    else{
        g= F((z-1867216.25)/36524.25);
        a= z+1+g-F(g/4);
    }
    b= a+1524;
    c= F((b-122.1)/365.25);
    d= F(365.25*c);
    e= F((b-d)/30.6001);
    h= F((e< 14)? (e-1): (e-13));
    var JA= [F((h> 2)? (c-4716): (c-4715)),
    h-1, F(b-d-F(30.6001*e)+f)];
    var JB= [F(j2/3600), F((j2/60)%60), Math.round(j2%60)];
    JA= JA.concat(JB);
    if(typeof n== \'number\') return JA.slice(0, n);
    return JA;
}
Date.getSeasons= function(y, wch){
    y= y || new Date().getFullYear();
    if(y<1000 || y> 3000) throw y+\' is out of range\';
    var Y1= (y-2000)/1000, Y2= Y1*Y1, Y3= Y2*Y1, Y4= Y3*Y1;
    var jd, t, w, d, est= 0, i= 0, Cos= Math.degCos, A= [y],
    e1= [485, 203, 199, 182, 156, 136, 77, 74, 70, 58, 52, 50, 45, 44, 29, 18, 17, 16, 14, 12, 12, 12, 9, 8],
    e2= [324.96, 337.23, 342.08, 27.85, 73.14, 171.52, 222.54, 296.72, 243.58, 119.81, 297.17, 21.02,
    247.54, 325.15, 60.93, 155.12, 288.79, 198.04, 199.76, 95.39, 287.11, 320.81, 227.73, 15.45],
    e3= [1934.136, 32964.467, 20.186, 445267.112, 45036.886, 22518.443,
    65928.934, 3034.906, 9037.513, 33718.147, 150.678, 2281.226,
    29929.562, 31555.956, 4443.417, 67555.328, 4562.452, 62894.029,
    31436.921, 14577.848, 31931.756, 34777.259, 1222.114, 16859.074];
    while(i< 4){
        switch(i){
            case 0: jd= 2451623.80984 + 365242.37404*Y1 + 0.05169*Y2 - 0.00411*Y3 - 0.00057*Y4;
            break;
            case 1: jd= 2451716.56767 + 365241.62603*Y1 + 0.00325*Y2+ 0.00888*Y3 - 0.00030*Y4;
            break;
            case 2: jd= 2451810.21715 + 365242.01767*Y1 - 0.11575*Y2 + 0.00337*Y3 + 0.00078*Y4;
            break;
            case 3: jd= 2451900.05952 + 365242.74049*Y1 - 0.06223*Y2 - 0.00823*Y3 + 0.00032*Y4;
            break;
        }
        var t= (jd- 2451545.0)/36525,
        w= 35999.373*t - 2.47,
        d= 1 + 0.0334*Cos(w)+ 0.0007*Cos(2*w);
        est= 0;
        for(var n= 0; n<24; n++){
            est += e1[n]*Cos(e2[n]+(e3[n]*t));
        }
        jd+= (0.00001*est)/d;
        A[++i]= Date.fromJulian(jd);
    }
    return wch && A[wch]? A[wch]: A;
}
Math.degRad= function(d){
    return (d*Math.PI)/180.0
}
Math.degSin= function(d){
    return Math.sin(Math.degRad(d))
}
Math.degCos= function(d){
    return Math.cos(Math.degRad(d))
}
    
这是单线。
const getSeason = d => Math.floor((d.getMonth() / 12 * 4)) % 4

console.log(\'Southern hemisphere (Summer as Dec/Jan/Feb etc...):\')
console.log([\'Summer\', \'Autumn\', \'Winter\', \'Spring\'][getSeason(new Date())])

console.log(\'Northern hemisphere (Winter as Dec/Jan/Feb etc...):\')
console.log([\'Winter\', \'Spring\', \'Summer\', \'Autumn\'][getSeason(new Date())])
可自定义的季节,可以执行以下操作: 天文 气象 6个季节 任何自然数 请注意,月份是0(一月)至11(十二月)。
const md = (month, day) => ({month, day})
const toMd = date => md(date.getMonth(), date.getDate())

const before = (md1, md2) => (md1.month < md2.month) 
  || ((md1.month === md2.month) && (md1.day < md2.day)) 

const after = (md1, md2) => !before(md1, md2)

const between = (mdX, mdLow, mdHigh) => 
  before(mdX, mdHigh) && after(mdX, mdLow)
 
const season = (date, seasons) => ((md = toMd(date)) =>
  Object.keys(seasons).find(season => seasons[season](md))
)()

const MARCH_EQUINOX = md(2, 20)
const JUNE_SOLSTICE = md(5, 21)
const SEPTEMBER_EQUINOX = md(8, 23)
const DECEMBER_SOLSTICE = md(11, 21)
const NEW_YEAR = md(0, 1)

const seasons = {
  spring: d => between(d, MARCH_EQUINOX, JUNE_SOLSTICE),
  summer: d => between(d, JUNE_SOLSTICE, SEPTEMBER_EQUINOX),
  fall: d => between(d, SEPTEMBER_EQUINOX, DECEMBER_SOLSTICE),
  winter: d => 
    between(d, DECEMBER_SOLSTICE, NEW_YEAR) ||
    between(d, NEW_YEAR, MARCH_EQUINOX)
}

console.log(
  \'It is currently\', 
  season(new Date(), seasons),
  \'in northern hemisphere on 4 season astronomical calendar\'
)

要回复问题请先登录注册