跳至內容
Astera Technology

每月指定日不存在時,排程怎樣展開?

明確跳過或用月底,各跑一次,不虛構欠跑紀錄。

下載完整個案資料及參考答案 ↓

訂判斷及所需輸入

題內要求2027 二月及三月每月三十一日。跳過規則二月沒有輪次,三月才三十一;月底路徑卻建二月二十八。兩種本地規則都可訂,這裏只收已明選那種。

已填本地測試工作表
情況輸入 JSON
原例測試{"year":2027,"months":[2,3],"day":31,"rule":"skip"}
下載可編輯 CSV ↓

跑所附比較

程序用 UTC 公曆月長展開題內規則,不解析外部重複格式,也不推供應商預設。

錯誤及所需輸出
路徑輸出 JSON
錯誤路徑{"dates":["2027-02-28","2027-03-31"]}
所需路徑{"dates":[null,"2027-03-31"]}
下載可編輯 CSV ↓
完整本地 Node24.14.1 程序
import assert from 'node:assert/strict';

const run=function run(i,corrected=true){
    if(!['skip','last-day'].includes(i.rule)||!Number.isInteger(i.year)||i.year<100||i.year>9999||!Number.isInteger(i.day)||i.day<1||i.day>31||!i.months.every(m=>Number.isInteger(m)&&m>=1&&m<=12))return {held:true};
    const dates=i.months.map(month=>{const last=new Date(Date.UTC(i.year,month,0)).getUTCDate();const day=corrected&&i.rule==='skip'&&i.day>last?null:Math.min(i.day,last);return day===null?null:i.year+'-'+String(month).padStart(2,'0')+'-'+String(day).padStart(2,'0');});
    return {dates};
  };
const cases=[{"input":{"year":2027,"months":[2,3],"day":31,"rule":"skip"},"corrected":false,"expected":{"dates":["2027-02-28","2027-03-31"]}},{"input":{"year":2027,"months":[2,3],"day":31,"rule":"skip"},"corrected":true,"expected":{"dates":[null,"2027-03-31"]}},{"input":{"year":2028,"months":[2],"day":31,"rule":"last-day"},"corrected":true,"expected":{"dates":["2028-02-29"]}},{"input":{"year":2027,"months":[1],"day":31,"rule":"skip"},"corrected":true,"expected":{"dates":["2027-01-31"]}},{"input":{"year":2027,"months":[2],"day":31,"rule":null},"corrected":true,"expected":{"held":true}}];
for(const test of cases){const actual=await run(test.input,test.corrected);assert.deepEqual(actual,test.expected);console.log(actual);}
下載可執行例子 ↓

按邊界依據作判斷

明訂2028 閏年月底邊界得二月二十九;跳過規則下一月三十一存在。規則欠缺就停。

  1. 核缺指定日時規則
  2. 按真正月長展開
  3. 記有輪次還是本來沒有

沒有明訂,不能自用月底替代。

可編輯邊界輸入及結果
條件輸入 JSON預期輸出 JSON
閏年明訂用月底{"year":2028,"months":[2],"day":31,"rule":"last-day"}{"dates":["2028-02-29"]}
三十一日實際存在{"year":2027,"months":[1],"day":31,"rule":"skip"}{"dates":["2027-01-31"]}
缺日期規則未訂{"year":2027,"months":[2],"day":31,"rule":null}{"held":true}
下載可編輯 CSV ↓

原例二月跳過,算工作失敗嗎?

查看參考答案

不是,按本例規則根本未生成二月輪次,不能當原本應有卻欠跑。

相關資源