2026年5月31日 星期日

*.js 時間相加 , 日期相加 -自訂函式 - TM_ADD DATE_ADD - parseInt - parseFloat

目的: 1>時間字串相加 --> "88:40 " +"01:30"="90:10"          , TM_ADD("88:40 ", "01:30 ")
          2>日期字串相加 --> 2026/06/01 +2年 = 2028/06/01    , DATE_ADD("2026/06/01","A",2) ;
                                             2026/07/01 +6月=2027/01/01      , DATE_ADD("2026/07/01","B",6) ;
                                             2026/07/15 +20天=2026/08/05    , DATE_ADD("2026/07/15","C",20) ;


 
1>時間字串相加  - TM_ADD(par_TM1,par_TM2);

//Ex:  Tmp_AFHR_ = get_TM_ADD(Tmp_AFHR, Tmp_FYTM);

function get_TM_ADD(par_TM1, par_TM2) {
    var Tmp_hh1, Tmp_hh2,Tmp_hh3;
    var Tmp_mm1, Tmp_mm2, Tmp_mm3;
    Tmp_hh1 = Number(StrExtract(par_TM1, 1, ":"));
    Tmp_mm1 = Number(StrExtract(par_TM1, 2, ":"));
    Tmp_hh2 = Number(StrExtract(par_TM2, 1, ":"));
    Tmp_mm2 = Number(StrExtract(par_TM2, 2, ":"));
    Tmp_mm3 = (Tmp_mm1 + Tmp_mm2) % 60;
    Tmp_hh = Math.trunc((Tmp_mm1 + Tmp_mm2) / 60);
    Tmp_hh3 = Tmp_hh1 + Tmp_hh2 + Tmp_hh;
    return Tmp_hh3.toString() + ":" + Tmp_mm3.toString();
}

function TM_ADD(par_TM1, par_TM2) {
    return get_TM_ADD(par_TM1, par_TM2)
}

2>日期字串相加 -  DATE_ADD(par_DT,par_UNIT,par_VAL);
     par_UNIT: A/B/C: 年/月/日

/*
 * function DATE_ADD(par_DT, par_UNIT,par_VAL)
 * 傳入參數:  par_DT:        原始日期
 *                      par_UNIT:    A/B/C: 年/月/日 
 *                      par_VAL:      累加數值
日期字串相加-- > 2026 / 06 / 01 + 2年 = 2028 / 06 / 01, DATE_ADD("2026/06/01", "A", 2);
                                 2026 / 07 / 01 + 6月 = 2027 / 01 / 01, DATE_ADD("2026/07/01", "B", 6);
                                 2026 / 07 / 15 + 20天 = 2026 / 08 / 05, DATE_ADD("2026/07/15", "C", 20);
*/
function DATE_ADD(par_DT, par_UNIT,par_VAL) {
    var Tmp_YYYY, Tmp_MM, Tmp_DD;
    var Tmp_YYYY1, Tmp_MM1, Tmp_DD1;
    var Tmp_ADD_YY1, Tmp_ADD_MM1;
    var Tmp_DT = DatetoStr(par_DT, "Y/m/d");    
    Tmp_YYYY = Number(StrExtract(Tmp_DT, 1, "/"));
    Tmp_MM = Number(StrExtract(Tmp_DT, 2, "/"));
    Tmp_DD = Number(StrExtract(Tmp_DT, 3, "/"));
    Tmp_YYYY1 = Tmp_YYYY; Tmp_MM1 = Tmp_MM; Tmp_DD1 = Tmp_DD;
    switch (par_UNIT) {
        case "A":  //年
        {
            Tmp_YYYY1 = Tmp_YYYY + parseInt(par_VAL);
            break;
        }
        case "B":  //月
            {
                Tmp_MM1 = Tmp_MM + parseInt(par_VAL);
                Tmp_ADD_YY1 = Math.trunc((Tmp_MM1) / 12);  //取商數
                Tmp_YYYY1 = Tmp_YYYY + Tmp_ADD_YY1;
                Tmp_MM1 = Math.trunc((Tmp_MM1) % 12);  //取餘數
                break;
            }
        case "C":  //天
            {
                //日期函式 Tmp_DT.setDate( )  ; 日期不對  
                //Tmp_DD1 = Tmp_DD1 + par_VAL;                
                var Tmp_DT = new Date(par_DT);
                var Tmp_DD = Tmp_DT.getDate();
                //console.log("2 Tmp_DT:", Tmp_DT);
                 //Tmp_DD 及 par_VAL 必需先轉成數值,才可以累加
                Tmp_DT.setDate(parseInt(Tmp_DD) + parseInt(par_VAL));  
                //console.log("3 Tmp_DT.setDate():", Tmp_DT);
                Tmp_YYYY1 = Tmp_DT.getFullYear();   // 年份 (例如 2026)
                Tmp_MM1 = Tmp_DT.getMonth() + 1; // 月份 (0~11,要 +1 才是正常月份)
                Tmp_DD1 = Tmp_DT.getDate();        // 日期 (1~31)                
                break;
            }
    }// end of switch (par_UNIT)    
    return Tmp_YYYY1.toString() + "/"+Tmp_MM1.toString() +"/"+ Tmp_DD1.toString();
}  // end of  function DATE_ADD(par_DT, par_UNIT,par_VAL) {

沒有留言:

張貼留言