<!---------------------------------------------------------------------
//     InputDataCheck.js
//
//  引数には、チェック対象オブジェクトを渡す。(.valueを持つもののみ）
//  エラー時、メッセージ表示し、エラーになった入力欄をフォーカスする。
//-------------------------------------------------------------------->
var g_iUnitLen = 'あ'.length; // ２バイト文字の処理単位

<!---------------------------------------------------------------------
//  関数名  GetCharSize
//
//  機能  先頭文字のバイト数を取得する（EUC）
//
//  引数  cCheck : チェック対象文字
//
//  戻り値  2 : 2バイト文字
//      1 : 1バイト文字
//      0 : 空文字
//-------------------------------------------------------------------->
function GetCharSize(cCheck)
{
  if (cCheck == '') {
    return 0;
  }

  var iResult = 0;
  var strBuffer = escape(cCheck);
  var cTemp1 = ('' + strBuffer).charAt(1);
  var cTemp2 = ('' + strBuffer).charAt(2);

  // 全角文字
  if ( (cTemp1=='8' && (cTemp2=='E' || cTemp2=='e')) || (cTemp1 >= 'A' && cTemp1 <= 'F') || (cTemp1 >= 'a' && cTemp1 <= 'f') ) {
    iResult = 2;
  }
  if ( cTemp1=='8' && (cTemp2=='F' || cTemp2=='f') ) {
    iResult = 3;
  }
  // 半角文字
  else {
    iResult = 1;
  }

  return iResult;
}

<!---------------------------------------------------------------------
//  関数名  StrLen
//
//  機能  文字列の文字数を取得する
//
//  引数  strCheck : チェック対象文字列
//
//  戻り値  文字列の文字数
//-------------------------------------------------------------------->
function StrLen(strCheck)
{
  var i, iStep; // カウンタ
  var iLen = 0; // 文字数

  if (!strCheck) { return 0; }

  for (i = 0; i < ('' + strCheck).length; i += iStep) {
    iStep = GetCharSize(('' + strCheck).charAt(i));
    iLen++;

    if (iStep == 2 && g_iUnitLen == 1) {
      iStep = 1;
    }
  }

  return iLen;
}
<!---------------------------------------------------------------------
//  関数名  StrLenB
//
//  機能  文字列のバイト数を取得する
//
//  引数  strCheck : チェック対象文字列
//
//  戻り値  文字列のバイト数
//-------------------------------------------------------------------->
function StrLenB(strCheck)
{
  var i, iStep; // カウンタ
  var iLenB = 0;  // バイト数

  if (!strCheck) { return 0; }

  for (i = 0; i < ('' + strCheck).length; i += iStep) {
    iStep = GetCharSize(('' + strCheck).charAt(i));
    iLenB += iStep;

    if (iStep == 2 && g_iUnitLen == 1) {
      iStep = 1;
    }
  }

  return iLenB;
}
<!---------------------------------------------------------------------
//  関数名  StrCut
//
//  機能  指定した文字列の一部を取得する
//
//  引数  strVal : 切り出し対象文字列
//      iStart : 開始位置（０オリジン）
//      iLen   : 文字列長
//
//  戻り値  結果文字列
//-------------------------------------------------------------------->
function StrCut(strVal, iStart, iLen)
{
  var i, iStep;     // カウンタ
  var iCharCount = 0;   // 文字数
  var strResult = '';   // 戻り値

  if (!strVal) { return ''; }

  // 文字列の終端に達するか、切り出しが完了するまでループする
  for (i = 0; i < ('' + strVal).length && iCharCount < iStart + iLen; i += iStep) {

    iStep = GetCharSize(('' + strVal).charAt(i));

    // 文字の切り出し
    if (iCharCount >= iStart) {
      if (iStep == 2 && g_iUnitLen == 2) {
        strResult += ('' + strVal).substring(i, i + 2);
      }
      else {
        strResult += ('' + strVal).charAt(i);
      }
    }

    iCharCount++;

    if (iStep == 2 && g_iUnitLen == 1) {
      iStep = 1;
    }
  }

  return strResult;
}

<!---------------------------------------------------------------------
//  関数名  StrCmp
//
//  機能  文字列の比較
//
//  引数  strValue1 : 比較文字列１
//      strValue2 : 比較文字列２
//      iCount[0] : 比較文字数
//
//  戻り値  >0 : strValue1 の部分文字列は strValue2 の部分文字列より小さい
//      =0 : strValue1 の部分文字列は strValue2 の部分文字列と等しい
//      <0 : strValue1 の部分文字列は strValue2 の部分文字列より大きい
//-------------------------------------------------------------------->
function StrCmp(strValue1, strValue2, iCount)
{
  var i, iStep;     // カウンタ
  var cValue1, cValue2; // 一時バッファ

  if (!iCount || iCount == 0) {
    iCount = Max(StrLen(strValue1), StrLen(strValue2));
  }

  for (i = 0; i < iCount; i++) {
    cValue1 = StrCut(strValue1, i, 1);
    cValue2 = StrCut(strValue2, i, 1);

    if (cValue1 != cValue2) {
      if (cValue1 < cValue2) {
        return -1;
      }
      else {
        return 1;
      }
    }
  }

  return 0;
}

<!---------------------------------------------------------------------
//  関数名  FindString
//
//  機能  文字列の後方検索
//
//  引数  strCheck  : チェック文字列
//      strMatch  : 一致文字列
//      iPoint[0] : 検索開始位置
//
//  戻り値   -1 : 一致文字列が見つからなかった
//      >=0 : 一致文字列を発見した位置（０オリジン）
//-------------------------------------------------------------------->
function FindString(strCheck, strMatch, iPoint)
{
  var i, iHit = 0;      // カウンタ
  var iCheckLen, iMatchLen; // 文字数

  // 省略引数のデフォルト値
  if (!iPoint) { iPoint = 0; }

  iCheckLen = StrLen(strCheck);
  iMatchLen = StrLen(strMatch);

  // どちらかの文字列が空か、一致文字列のほうが長ければ不一致を返す
  if (iCheckLen <= 0 || iMatchLen <= 0 || iCheckLen < iMatchLen) {
    return -1;
  }

  // チェック文字列ループ
  for (i = iPoint; i < iCheckLen; i++) {

    if (StrCut(strCheck, i, 1) == StrCut(strMatch, iHit, 1)) {
      iHit++;
    }
    else {
      iHit = 0;
    }

    if (iHit >= iMatchLen) {
      return i - (iHit - 1);
    }
  }

  return -1;
}

<!---------------------------------------------------------------------
//  関数名  FindCharList
//
//  機能  文字リストの後方検索
//
//  引数  strCheck    : チェック文字列
//      strCharList : 一致文字候補リスト
//      iPoint[0]   : 検索開始位置
//
//  戻り値   -1 : 一致文字列が見つからなかった
//      >=0 : 一致文字列を発見した位置（０オリジン）
//-------------------------------------------------------------------->
function FindCharList(strCheck, strCharList, iPoint)
{
  var i;            // カウンタ
  var iCheckLen, iListLen;  // 文字数

  // 省略引数のデフォルト値
  if (!iPoint) { iPoint = 0; }

  iCheckLen = StrLen(strCheck);
  iListLen = StrLen(strCharList);

  // どちらかの文字列が空ならば不一致を返す
  if (iCheckLen <= 0 || iListLen <= 0) {
    return -1;
  }

  for (i = iPoint; i < iCheckLen; i++) {
    if (FindString(strCharList, StrCut(strCheck, i, 1)) != -1) {
      return i;
    }
  }

  return -1;
}

<!---------------------------------------------------------------------
//  関数名  TrimString
//
//  機能  文字列前後の空白削除
//
//  引数  strTrim : チェック文字列
//
//  戻り値  処理結果文字列
//-------------------------------------------------------------------->
function TrimString(strTrim)
{
  var i = 0;      // カウンタ
  var cTemp, strTemp; // 文字切り出し用バッファ
  var bTrim = true; // 空白削除フラグ
  var strResult = ''; // 結果文字列
  var iLen = StrLen(strTrim);

  strTemp = '';
  for (i = 0; i < iLen; i++) {

    cTemp = StrCut(strTrim, i, 1);

    if (bTrim == true) {
      if (FindString(' 　', cTemp) == -1) {
        bTrim = false;
        strResult = cTemp;
      }
    }
    else {
      if (FindString(' 　', cTemp) != -1) {
        strTemp += cTemp; // 中間の空白を考慮して保存しておく
      }
      else {
        // 一時保存しておいた文字列も含めて結果文字列へ追加する
        strResult += strTemp + cTemp;
        strTemp = '';
      }
    }
  }

  return strResult;
}

<!---------------------------------------------------------------------
//  関数名  ReplaceChar
//
//  機能  文字単位の置換
//
//  引数  strString  : 対象文字列
//      strRegexp  : 置換候補リスト
//      strNewChar : 置換文字リスト
//
//  戻り値  処理結果文字列
//-------------------------------------------------------------------->
function ReplaceChar(strString, strRegexp, strNewChar)
{
  var i = 0;      // カウンタ
  var iLen = 0;   // 検索候補リストの文字数
  var cBuffer = ''; // 一時バッファ
  var iPos = 0;   // 置換文字インデックス
  var strResult = ''; // 処理結果文字列

  iLen = StrLen(strString);

  for (i = 0; i < iLen; i++) {
    // 1文字づつ取り出す
    cBuffer = StrCut(strString, i, 1);

    // 置換候補でないかチェックする
    iPos = FindString(strRegexp, cBuffer);
    if (iPos != -1) {
      strResult += StrCut(strNewChar, iPos, 1);
    }
    else {
      strResult += cBuffer;
    }
  }

  return strResult;
}

<!---------------------------------------------------------------------
//  関数名  ReplaceString
//
//  機能  文字列の置換
//
//  引数  strString   : 対象文字列
//      strRegexp   : 置換候補文字列
//      strNewChar  : 置換文字列
//      bAll[FALSE] : 置換方法 TRUE:全置換 / FALSE:単一置換
//
//  戻り値  処理結果文字列
//-------------------------------------------------------------------->
function ReplaceString(strString, strRegexp, strNewStr, bAll)
{
  var i, iLen, iRegLen;
  var iPos = 0;
  var strResult = '';

  if (!bAll) { bAll = false; }

  iLen = StrLen(strString);
  iRegLen = StrLen(strRegexp);

  for (i = 0; i < iLen; i++) {

    iPos = FindString(strString, strRegexp, i);

    if (iPos == -1) {
      strResult += StrCut(strString, i, iLen - i + 1);
      iPos = iLen;
    }
    else {
      strResult += StrCut(strString, i, iPos - i) + strNewStr;
    }

    i = iPos + iRegLen - 1;

    if (bAll == false) {
      strResult += StrCut(strString, i + 1, iLen - i);
      break;
    }
  }

  return strResult;
}

<!---------------------------------------------------------------------
//  関数名  Split
//
//  機能  区切り文字で文字列を単純分割する
//
//  引数  strString : 対象文字列
//      strDivide : 区切り文字リスト
//
//  戻り値  配列（１オリジン）
//
//  ※strDivide には区切り文字を繋げて指定します。
//-------------------------------------------------------------------->
function Split(strString, strDivide)
{
  var iLen;
  var iFrom, iTo;
  var aResult = new Array();

  iFrom = iTo = 0;
  iLen = StrLen(strString);
  for (i = 1; iFrom < iLen; i++) {
    aResult[i] = '';  // 配列要素の初期化

    iTo = FindCharList(strString, strDivide, iFrom);
    if (iTo == -1) {
      iTo = iLen;
    }

    aResult[i] = StrCut(strString, iFrom, iTo - iFrom);
    iFrom = iTo + 1;
  }

  return aResult;
}

<!---------------------------------------------------------------------
// 数値フィールド用　入力文字列のサイズチェック
//      targetObj     : フィールド名
//      bMust[false]  : 入力必須フラグ
//      iMinlen[0]    : 最小バイト数
//      iMaxlen[0]    : 最大バイト数
//      strName       : エラー表示用フィールド名
//-------------------------------------------------------------------->
function NumlenCheck(targetObj, bMust, iMinlen, iMaxlen, strName)
{
  // 省略引数のデフォルト値
  if (!bMust) { bMust = false; }
  if (!iMinlen) { iMinlen = 0; }
  if (!iMaxlen) { iMaxlen = 0; }
  if (!strName) { strName = ''; }

  var strCheck = targetObj.value;
  
  // 前後の空白を削除
  strCheck = TrimString(strCheck);
  
  // 文字列長チェック
  var len = StrLenB(strCheck);
  if( len == 0 ){
    if( bMust == true ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"を入力してください。");  
      return false;
    }
  }
  else if( iMinlen == iMaxlen && len != iMinlen ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+iMaxlen+"文字で入力してください。");
    return false;
  }
  else if( len > iMaxlen ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+iMaxlen+"文字以内で入力してください。");
    return false;
  }
  else if( len < iMinlen ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+iMinlen+"文字以上で入力してください。");
    return false;
  }
  // 文字種チェック
  if( len > 0 ){
    if(strCheck.search(/[^0-9.\-]/i) != -1 ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"は、半角数字で入力してください。");
      return false;
    }
  }
  return true;
}

<!---------------------------------------------------------------------
// 数値フィールド、SELECT用　入力文字列の数値範囲チェック
//      targetObj     : フィールド名
//      bMust[false]  : 入力必須フラグ
//      iMinlen[0]    : 最小バイト数
//      iMaxlen[0]    : 最大バイト数
//      strName       : エラー表示用フィールド名
//-------------------------------------------------------------------->
function NumValCheck(targetObj, bMust, iMin, iMax, strName)
{
  // 省略引数のデフォルト値
  if (!bMust) { bMust = false; }
  if (!iMin) { iMin = 0; }
  if (!iMax) { iMax = 0; }
  if (!strName) { strName = ''; }

  var strCheck = targetObj.value;
  
  // 前後の空白を削除
  strCheck = TrimString(strCheck);
  
  // 文字列長チェック
  var len = StrLenB(strCheck);
  var iVal = 0 + strCheck;
  // 文字種チェック
  if( len > 0 ){
    if(strCheck.search(/[^0-9.\-]/i) != -1 ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"は、半角数字で入力してください。");
      return false;
    }
  }
  else{
    if( bMust == true ){
      alert(strName+"を入力してください。");  
      targetObj.focus();
      targetObj.select();
      return false;
    }
  }
  if( iVal > iMax ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+iMax+"以下で入力してください。");
    return false;
  }
  else if( iVal < iMin ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+iMin+"以上で入力してください。");
    return false;
  }
  return true;
}

<!---------------------------------------------------------------------
// JANコードフィールド用　入力文字列のチェック
//      targetObj     : フィールド名
//      bMust[false]  : 入力必須フラグ
//      iMinlen[0]    : 最小バイト数
//      iMaxlen[0]    : 最大バイト数
//      strName       : エラー表示用フィールド名
//-------------------------------------------------------------------->
function JancodeCheck(targetObj, bMust, ilen1, ilen2, strName)
{
  // 省略引数のデフォルト値
  if (!bMust) { bMust = false; }
  if (!ilen1) { ilen1 = 0; }
  if (!ilen2) { ilen2 = 0; }
  if (!strName) { strName = ''; }

  var strCheck = targetObj.value;
  
  // 前後の空白を削除
  strCheck = TrimString(strCheck);
  
  // 文字列長チェック
  var len = StrLenB(strCheck);
  if( len == 0 ){
    if( bMust == true ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"を入力してください。");  
      return false;
    }
  }
  else if( ilen1 == ilen2 && len != ilen1 ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+ilen1+"文字で入力してください。");
    return false;
  }
  else if( ilen1 != ilen2 && len != ilen1 && len != ilen2 ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+ilen1+"文字または"+ilen2+"文字で入力してください。");
    return false;
  }
  // 文字種チェック
  if( len > 0 ){
    if(strCheck.search(/[^0-9.\-]/i) != -1 ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"は、半角数字で入力してください。");
      return false;
    }
    var strTop1 = StrCut(strCheck, 0, 2);
    var strTop2 = StrCut(strCheck, 0, 3);
    if( len>7 && strTop1!="45" && strTop1!="49" && strTop2!="978" ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"の先頭は、45, 49, 978 のみ受け付けています。");
      return false;
    }
    if( len<8 && strTop1!="45" && strTop1!="49" ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"の先頭は、45, 49 のみ受け付けています。");
      return false;
    }
  }

  return true;
}

function calcJanCheckDigit(targetObj) {

  var strJan = targetObj.value;

  var len = StrLenB(strJan);
  var inum1 = inum2 = inum3 = inum4 = inum5 = 0;

  //--- １３桁ＪＡＮの場合 ---
  if ( len==13 ){
    inum1 = StrCut(strJan,1,1) * 1;
    inum1 += StrCut(strJan,3,1) * 1;
    inum1 += StrCut(strJan,5,1) * 1;
    inum1 += StrCut(strJan,7,1) * 1;
    inum1 += StrCut(strJan,9,1) * 1;
    inum1 += StrCut(strJan,11,1) * 1;
    inum1 = inum1 * 3;

    inum2 = StrCut(strJan,0,1) * 1;
    inum2 += StrCut(strJan,2,1) * 1;
    inum2 += StrCut(strJan,4,1) * 1;
    inum2 += StrCut(strJan,6,1) * 1;
    inum2 += StrCut(strJan,8,1) * 1;
    inum2 += StrCut(strJan,10,1) * 1;

    inum3 = inum1 + inum2;
    inum4 = (10 - inum3 % 10) % 10;
    inum5 = StrCut(strJan,12,1) * 1;

    if( inum5 != inum4 ){
      targetObj.focus();
      targetObj.select();
      alert("JANコードに入力ミスがあるようです。確認してください。");
      return false;
    }
  }
  //--- ８桁ＪＡＮの場合 ---
  else if ( len==8 ){
    inum1 = StrCut(strJan,0,1) * 1;
    inum1 += StrCut(strJan,2,1) * 1;
    inum1 += StrCut(strJan,4,1) * 1;
    inum1 += StrCut(strJan,6,1) * 1;
    inum1 = inum1 * 3;

    inum2 = StrCut(strJan,1,1) * 1;
    inum2 += StrCut(strJan,3,1) * 1;
    inum2 += StrCut(strJan,5,1) * 1;

    inum3 = inum1 + inum2;
    inum4 = (10 - inum3 % 10) % 10;
    inum5 = 0 + StrCut(strJan,7,1);

    if( inum5 != inum4 ){
      targetObj.focus();
      targetObj.select();
      alert("JANコードに入力ミスがあるようです。確認してください。");
      return false;
    }
  }
  return true;
}

<!---------------------------------------------------------------------
// 入力文字列のサイズチェック
//      targetObj     : フィールド名
//      bMust[false]  : 入力必須フラグ
//      iLenB[0]      : 最大バイト数
//      strName       : エラー表示用フィールド名
//-------------------------------------------------------------------->
function StrlenCheck(targetObj, bMust, iLenB, strName)
{
  // 省略引数のデフォルト値
  if (!bMust) { bMust = false; }
  if (!iLenB) { iLenB = 0; }
  if (!strName) { strName = ''; }

  var strCheck = targetObj.value;
  
  // 前後の空白を削除
  strCheck = TrimString(strCheck);
  
  // 文字列長チェック
  var len = StrLen(strCheck);

  if( bMust == true && len == 0 ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"を入力してください");  
    return false;
  }
  else if( len > iLenB ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、"+iLenB+"文字以内で入力してください。");
    return false;
  }
  return true;
}
<!---------------------------------------------------------------------
// 日付フィールド用　入力文字列のチェック
//      targetObj     : フィールド名
//      bMust[false]  : 入力必須フラグ
//      strName       : エラー表示用フィールド名
//      sw            : 0:年月日    1:年月のみ
//-------------------------------------------------------------------->
function DatefieldCheck(targetObj, bMust, strName)
{
  // 省略引数のデフォルト値
  if (!bMust) { bMust = false; }
  if (!strName) { strName = ''; }

  var strCheck = targetObj.value;
  
  // 前後の空白を削除
  strCheck = TrimString(strCheck);

  strCheck = ReplaceChar(strCheck, "/", "-");
  
  // 文字種と文字列長チェック
  var len = StrLenB(strCheck);
  var iYear;
  var iMonth;
  var iDay;
  if( len == 0 ){
    iYear =  0;
    iMonth = 0;
    iDay = 0;
  }
  else if(strCheck.search(/[^0-9]/i) == -1 && len == 8 ){
    iYear = StrCut(strCheck, 0, 4) - 0;
    iMonth = StrCut(strCheck, 4, 2) - 0;
    iDay = StrCut(strCheck, 6, 2) - 0;
  }
  else if(strCheck.search(/[^0-9\-]/i) == -1 && (len >= 8 && len <= 10) ){
    var dateval = Split(strCheck, "-");
    iYear = dateval[1] - 0;
    iMonth = dateval[2] - 0;
    iDay = dateval[3] - 0;
  }
  else{
    targetObj.focus();
    targetObj.select();
    alert(strName+"は、半角数字、ハイフンまたはスラッシュ、８〜１０文字で入力してください。");
    return false;
  }

  // 未入力の場合
  if( iYear == 0 && iMonth == 0 && iDay == 0 ){
    if( bMust == true ){
      targetObj.focus();
      targetObj.select();
      alert(strName+"を入力してください。");  
      return false;
    }else{
      targetObj.value = "0000-00-00";
      return true;
    }
  }

  // 正当性チェック
  if( DateValidCheck( iYear, iMonth, iDay ) == false ){
    targetObj.focus();
    targetObj.select();
    alert(strName+"に有効な日付を入力して下さい。");
    return false;
  }
  return true;
}
<!---------------------------------------------------------------------
//    日付の正当性チェック 
//-------------------------------------------------------------------->
function DateValidCheck( iYear, iMonth, iDay ) {

  // 未入力を許可
  if(iYear==0 && iMonth==0 && iDay==0)  return true;

  // 数値チェック
  if ( iYear < 1900 || iYear >= 3000 )  return false;
  if ( iMonth < 1   || iMonth > 12   )  return false;
  if ( iDay < 1     || iDay > 31     )  return false;
    
  // 日付の正当性チェック
  if (iMonth == 2) {
    if (iYear % 400 == 0 || (iYear % 100 != 0 && iYear % 4 == 0)) {
      if (iDay > 29) {
        return false;
      }
    }
    else if (iDay > 28) {
      return false;
    }
  }
  else if (iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11) {
    if (iDay > 30) {
      return false;
    }
  }
  return true;
}
<!---------------------------------------------------------------------
//    TELの正当性チェック 
//-------------------------------------------------------------------->
function TelCheck( targetObj, bMust ) {

  // 省略引数のデフォルト値
  if (!bMust) { bMust = false; }

  var strCheck = targetObj.value;

  // 前後の空白を削除
  strCheck = TrimString(strCheck);

  strCheck = ReplaceChar(strCheck, "-", "");
  strCheck = ReplaceChar(strCheck, "(", "");
  strCheck = ReplaceChar(strCheck, ")", "");

  // 文字列長チェック
  var len = StrLenB(strCheck);

  if( len == 0 ){
    if( bMust == true ){
      targetObj.focus();
      targetObj.select();
      alert("電話番号を入力してください");  
      return false;
    }else{
      return true;
    }
  }
  else if( StrCut(strCheck, 0, 1) != "0" ){
    targetObj.focus();
    targetObj.select();
    alert("電話番号は市外局番から入力してください。");
    return false;
  }
  else if( len < 9 ){
    targetObj.focus();
    targetObj.select();
    alert("電話番号が短すぎます。");
    return false;
  }
  else if( len > 20 ){
    targetObj.focus();
    targetObj.select();
    alert("電話番号が長すぎます。");
    return false;
  }
  return true;
}
<!---------------------------------------------------------------------
// ２つの日付( yyyy-mm-dd形式 or yyyymmdd形式 )間の差を得る。
// 開始から終了までの期間の日数を得るには、後で +1 すること。
//
// 引数    sdate      i  開始日付文字列 ( yyyy-mm-dd形式 or yyyymmdd形式 )
//         edate      i  終了日付文字列
// 戻り値   正 : 日数
//         -1  : エラー
//-------------------------------------------------------------------->
function subDate( sdate, edate ){

  sdate = ReplaceChar(sdate, "/", "-");
  edate = ReplaceChar(edate, "/", "-");
  
  // 文字種と文字列長チェック
  var len1 = StrLenB(sdate);
  var len2 = StrLenB(edate);
  var iYear1, iYear2;
  var iMonth1,iMonth2;
  var iDay1,iDay2;
  if( len1 == 0 || len2 == 0 )   return -1;

  if(sdate.search(/[^0-9]/i) == -1 && len1 == 8 ){
    iYear1 = StrCut(sdate, 0, 4) - 0;
    iMonth1 = StrCut(sdate, 4, 2) - 0;
    iDay1 = StrCut(sdate, 6, 2) - 0;
  }
  else if(sdate.search(/[^0-9\-]/i) == -1 && (len1 >= 8 && len1 <= 10) ){
    var dateval = Split(sdate, "-");
    iYear1 = dateval[1] - 0;
    iMonth1 = dateval[2] - 0;
    iDay1 = dateval[3] - 0;
  }
  else return -1;

  if(edate.search(/[^0-9]/i) == -1 && len2 == 8 ){
    iYear2 = StrCut(edate, 0, 4) - 0;
    iMonth2 = StrCut(edate, 4, 2) - 0;
    iDay2 = StrCut(edate, 6, 2) - 0;
  }
  else if(edate.search(/[^0-9\-]/i) == -1 && (len2 >= 8 && len2 <= 10) ){
    var dateval = Split(edate, "-");
    iYear2 = dateval[1] - 0;
    iMonth2 = dateval[2] - 0;
    iDay2 = dateval[3] - 0;
  }
  else return -1;

  var d1 = new Date( iYear1, iMonth1-1, iDay1 );
  var d2 = new Date( iYear2, iMonth2-1, iDay2 );

  var daycnt = (d2 - d1)/(24 * 60 * 60 * 1000);
  return daycnt;
}

<!---------------------------------------------------------------------
// 日付( yyyy-mm-dd形式 or yyyymmdd形式 )の指定月数後の日付を得る
// 引数    sdate      i  日付文字列 ( yyyy-mm-dd形式 or yyyymmdd形式 )
//         mcnt       i  加算する月数
// 戻り値  加算された日付
//         -1  : エラー
//-------------------------------------------------------------------->
function addDate( sdate, ycnt, mcnt, dcnt ){
  sdate = ReplaceChar(sdate, "/", "-");
  
  // 文字種と文字列長チェック
  var len = StrLenB(sdate);
  var iYear;
  var iMonth;
  var iDay;
  if( len == 0 )   return -1;

  if(sdate.search(/[^0-9]/i) == -1 && len == 8 ){
    iYear = StrCut(sdate, 0, 4) - 0;
    iMonth = StrCut(sdate, 4, 2) - 0;
    iDay = StrCut(sdate, 6, 2) - 0;
  }
  else if(sdate.search(/[^0-9\-]/i) == -1 && (len >= 8 && len <= 10) ){
    var dateval = Split(sdate, "-");
    iYear = dateval[1] - 0;
    iMonth = dateval[2] - 0;
    iDay = dateval[3] - 0;
  }
  else return -1;

  // 指定日付に年数、月数、日数を加算する
  var d = new Date( iYear+ycnt, iMonth+mcnt-1, iDay+dcnt );

  var iYear2 = d.getFullYear();
  var iMonth2 = d.getMonth() + 1;
  var iDay2 = d.getDate();
  var ystr, mstr, dstr;

  if( iYear2<1900 )  iYear2 = 1900 + iYear2;
  ystr = "" + iYear2;

  if( iMonth2 < 10 )  mstr = "0" + iMonth2;
  else                mstr = "" + iMonth2;

  if( iDay2 < 10 )    dstr = "0" + iDay2;
  else                dstr = "" + iDay2;

  return ystr+"-"+mstr+"-"+dstr;
}


