<html>
<head>
<title>Unicode Decoder</title>
<script language="JScript">
////////////////////////////////////////////////////////////////
// Unicode Decoder
//
////////////////////////////////////////////////////////////////
//====================================
// 処理メイン
//====================================
function ScriptMain() {
var arrayLines = window.form1.targetList.value.split(/\n/);
// 結果リストボックス用領域を準備。
var resultList = "";
// 改行コードを削除する。
for (var i=0; i<arrayLines.length; i++) {
strLine = arrayLines[i].replace(/[\n\r]/g, ""); // 改行コードを削除する。
strWords = strLine.replace(/(\\u.{4})+/ig, '__%%%__');
arrayUcodes = strLine.match(/(\\u.{4})+/ig);
for (var j=0; j<arrayUcodes.length; j++) {
strWords = strWords.replace(/__%%%__/, unicodeUnescape(arrayUcodes[j]));
}
resultList = resultList + strWords + "\n";
}
// 結果リストボックスの内容を更新する。
window.form1.resultList.value = resultList;
}
//==================================
// Unicode Unescape
//==================================
var unicodeUnescape = function(str) {
var result = '', strs = str.match(/\\u.{4}/ig);
if (!strs) return '';
for (var i = 0, len = strs.length; i < len; i++) {
result += String.fromCharCode(strs[i].replace('\\u', '0x'));
}
return result;
};
//==================================
// Window OnLoad イベントプロシジャ
//==================================
window.onload = function() {
// Windowサイズを調整する。
window.resizeTo(790,460)
};
</script>
</head>
<hta:application
id="HTA"
icon=""
applicationname=""
border="thick"
borderstyle="normal"
caption="yes"
innerborder="yes"
maximizebutton="yes"
minimizebutton="yes"
showintaskbar="yes"
singleinstance="no"
sysmenu="yes"
version=""
windowstate="nomal"
scroll="yes"
scrollflat="yes"
selection="yes"
contextmenu="yes"
navigable="yes" />
<body>
<form name="form1">
<table>
<tr valign="middle">
<td><textarea name="targetList" cols="30" rows="20" wrap="off"></textarea></td>
<td><input type="button" value=" ⇒ " onClick="ScriptMain()" /></td>
<td><textarea name="resultList" cols="60" rows="20" wrap="off"></textarea></td>
</tr>
</table>
</form>
</body>
</html>
# -*- coding: utf8 -*-
import sys
from tkinter import Tk, ttk, StringVar
# configファイル名
config_file = 'config.py'
# 送信先dict
ip_lists = [{'ip1' : '192.168.1.1', 'ip2' : '192.168.2.1', 'name' : 'A君'},
{'ip1' : '192.168.1.2', 'ip2' : '192.168.2.2', 'name' : 'B君'},
{'ip1' : '192.168.1.3', 'ip2' : '192.168.2.3', 'name' : 'C君'},
{'ip1' : '192.168.1.4', 'ip2' : '192.168.2.4', 'name' : 'D君'},
{'ip1' : '192.168.1.4', 'ip2' : '192.168.2.4', 'name' : 'E君'},
{'ip1' : '192.168.1.5', 'ip2' : '192.168.2.5', 'name' : 'F君'} ]
##########
def cancel_btn_event (ev):
"""
cancelボタン押下イベントプロシジャ
"""
global win
win.quit()
##########
def getValue(strTargetKey, strTargetString):
"""
文字列中のkeyからvalueを返す。
Parameters
----------
strTargetKey : string
探し出すkey
strTargetString : string
key=valueを含む検索対象文字列
Returns
-------
value : int
keyに対応するvalueを返す。
"""
# '=' で区切って key-value に分割する
strKey, strValue = strTargetString.split('=', 1) # 1回目を区切って、2個目以降は区切らない
strValue = strValue.strip()
return strValue.strip('\'\"')
##########
def find_line(strTargetKey, listData):
"""
configを読み込んだリストから特定 key を含む行番号を返す。
Parameters
----------
strTargetKey : string
探し出すkey
listData : list
configを読み込んだリスト
Returns
-------
行番号 : int
先頭の場合は1を返し、なければ0を返す。
"""
bFindFlag = False
# list の全ての内容から、strTargetKey を探す
for i in range(len(listData)):
# 1行取り出しては # より右の文字列を削除する
strLine = listData[i].split('#', 1)
# = がなければ key-value ではない
if not '=' in strLine[0]:
continue
strLine = listData[i].split('#')
strKey, strValue = strLine[0].split('=', 1) # 1回目を区切って、2個目以降は区切らない
# Targetのkeyと同じkeyをconfigからみつけたら、その行番号を返す。先頭行なら「1」を返す
if strTargetKey.strip() == strKey.strip():
return i + 1
# key が見つからない場合は 0 を返す
if not bFindFlag:
return 0
##### main #####
if __name__ == '__main__':
### configを読み込む
with open(config_file, "r") as f:
config_lines = f.readlines()
### Tkinter を使ってWindowを用意する
win = Tk()
win.title(u"Config Changer")
win.geometry("400x300")
### 送信先ラジオボタンを表示する
lbl1 = ttk.Label(win, text='送信先: ')
lbl1.place(x=15, y=10)
ip_grp = StringVar()
ip_Radiobutton = []
# config内に'ip'の行があれば、その内容を取得する
intConfigIp = find_line('ip', config_lines)
if intConfigIp != 0:
strIpValue = getValue('ip', config_lines[intConfigIp-1])
else:
strIpValue = ''
# 送信先ラジオボタンを設定する
y_axis = 30
for i in range(len(ip_lists)):
Radio = ttk.Radiobutton(win, text=ip_lists[i]['name']+' ('+ip_lists[i]['ip1']+')', variable=ip_grp, value=(str(i)))
ip_Radiobutton.append(Radio)
ip_Radiobutton[i].place(x=40, y=y_axis)
y_axis = y_axis + 20
# config内に表示と同じ'ip'があれば、そのボタンをチェックする
if strIpValue == ip_lists[i]['ip1']:
ip_grp.set(str(i))
### ファイルタイプラジオボタンを表示する
lbl2 = ttk.Label(win, text='ファイルタイプ: ')
lbl2.place(x=15, y=160)
type_grp = StringVar()
#type_grp.set('csv')
type_csv = ttk.Radiobutton(win, text='csv', variable=type_grp, value='csv')
type_xml = ttk.Radiobutton(win, text='xml', variable=type_grp, value='xml')
type_csv.place(x=40, y=180)
type_xml.place(x=40, y=200)
lbl3 = ttk.Label(win, text='送信モード: ')
lbl3.place(x=200, y=160)
mode_grp = StringVar()
mode_grp.set('normal')
mode_csv = ttk.Radiobutton(win, text='Normal', variable=mode_grp, value='normal')
mode_xml = ttk.Radiobutton(win, text='Hi speed', variable=mode_grp, value='speed')
mode_csv.place(x=240, y=180)
mode_xml.place(x=240, y=200)
ok_btn = ttk.Button(text='保存')
cancel_btn = ttk.Button(text='キャンセル')
ok_btn.place(x=200, y=250)
cancel_btn.place(x=300, y=250)
ok_btn.bind( '<Button-1>', cancel_btn_event )
cancel_btn.bind( '<Button-1>', cancel_btn_event )
find_line('ip', config_lines)
win.mainloop()
/////////////////////////////
// 日付のフォーマッティング
// formatDate(Date [, type])
/////////////////////////////
function formatDate() {
if (arguments.length == 0) return "";
var targetDate = new Date();
targetDate.setTime( arguments[0].getTime() );
var yy = targetDate.getYear();
var mm = targetDate.getMonth() + 1;
var dd = targetDate.getDate();
if (yy < 2000) { yy += 1900; }
if (mm < 10) { mm = "0" + mm; }
if (dd < 10) { dd = "0" + dd; }
var charSeparator1 = "";
var charSeparator2 = "";
var charSeparator3 = "";
if (arguments.length > 1) {
switch (arguments[1]) {
case 1:
charSeparator1 = "/";
charSeparator2 = "/";
break;
case 2:
charSeparator1 = "-";
charSeparator2 = "-";
break;
case 3:
charSeparator1 = "年";
charSeparator2 = "月";
charSeparator3 = "日";
break;
default:
charSeparator1 = "";
charSeparator2 = "";
}
}
return (yy + charSeparator1 + mm + charSeparator2 + dd + charSeparator3);
}
/////////////////////////////
// 本日日付取得
/////////////////////////////
function getToday(type) {
var todayDate = new Date();
return (formatDate(todayDate, type));
}
//////////////////////////////////
// 休日リスト(画面)をファイル保存
//////////////////////////////////
function saveHolidays() {
var objOutputResult = objFSO.OpenTextFile(pathName + holidayListName, 2, true, -2);
objOutputResult.WriteLine(document.form1.holidayList.value);
objOutputResult.close();
}
</script>
</head>
<hta:application
id="HTA"
icon=""
applicationname=""
border="thick"
borderstyle="normal"
caption="yes"
innerborder="yes"
maximizebutton="yes"
minimizebutton="yes"
showintaskbar="yes"
singleinstance="no"
sysmenu="yes"
version=""
windowstate="nomal"
scroll="yes"
scrollflat="yes"
selection="yes"
contextmenu="yes"
navigable="yes" />
<body>
<p>
日報の当日分を作成する。
</p>
<form name="form1">
<p>日付
<input type="text" name="date" class="datepicker" id= "datepicker1" style="width:8em;" />
</p>
<p>
<input type="button" value=" 実行 " onClick="ScriptMain()" /> (処理にちょっと時間がかかります)<br />
Excelに「読み取り専用で開きますか?」と聞かれたら、「いいえ(<u>N</u>)」を選択してください。<br />
</p>
<p>
休日一覧<br />
<textarea name="holidayList" cols="20" rows="15"></textarea><br />
<input type="button" value=" 保存 " onClick="saveHolidays()" /> (休日一覧を変更したとき用)
</p>
</form>
</body>
</html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>オペレーション日報作成</title>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/redmond/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery-ui-i18n.min.js"></script>
<style type="text/css">body, input, textarea {font-family: "MS Pゴシック",sans-serif;}</style>
<script type="text/javascript">
/////////////////////////////
// Window OnLoad イベントプロシジャ
/////////////////////////////
$(function() {
$.datepicker.setDefaults($.datepicker.regional['ja']);
$(".datepicker").datepicker({
dateFormat: 'yy/mm/dd',
autoSize: true
});
// 日付欄に初期値として本日日付を表示
document.form1.date.value = getToday(1);
// 休日ファイルを読込んで、表示する
if(objFSO.FileExists(pathName + holidayListName)) {
var objInputFile = objFSO.OpenTextFile(pathName + holidayListName, 1, false, -2);
var listItems = "";
while (!objInputFile.AtEndOfStream) {
var LineVal = objInputFile.ReadLine();
listItems += LineVal + "\n";
}
objInputFile.close();
document.form1.holidayList.value = listItems;
}
window.resizeTo(640,500);
});
</script>
<script language="JScript">
//====================================
//====================================
var pathName = "C:\\Users\\マスタ\\";
//var pathName = "\\\\日報\\マスタ\\";
var orgFileName = "___マスタ.xls"; // 雛形のファイル名
var fileName = "日報_%%TODAY%%.xls"; // 結果用ファイル名
var holidayListName = "__HolidayList.txt"; // 休日ファイル名
var constWeekdays = ["日", "月", "火", "水", "木", "金", "土"];
var constNumOfWeeks = [1, 8, 15, 22, 29]; // 第x週の初めの「日」
var constMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // 月別の満日数 (後述のisIntercalaryMonth()と一緒に用いると、閏月まで対応できる)
var idTimer;
var arrHolidays = new Array(); // 休日ファイルの内容をDate型にして収めたArray
var objShell = new ActiveXObject("WScript.Shell");
var objFSO = new ActiveXObject("Scripting.FileSystemObject");
//Excel のアプリケーションオブジェクトを生成
var objXL = new ActiveXObject("Excel.Application");
function ScriptMain() {
// 日付の設定
var todayDate = new Date(document.form1.date.value); // 当日日付
var targetDate = new Date();
var yesterdayDate = new Date();
yesterdayDate.setTime( todayDate.getTime() - 86400000);
var today = formatDate(todayDate);
var yesterday = formatDate(yesterdayDate);
// 当日分ファイルのファイル名を作成する。
var resultOrgName = pathName + orgFileName;
var resultFileName = pathName + fileName;
resultFileName = resultFileName.replace("%%TODAY%%", today);
resultFileName = resultFileName.replace("%%YESTERDAY%%",yesterday);
// 休日ファイルの読込み処理をCall
getHolidayList( arrHolidays );
// マスターファイルを、当日分のファイルとしてコピーする
objFSO.CopyFile(resultOrgName, resultFileName);
ExecuteExcel(resultFileName, todayDate);
}
function ExecuteExcel(resultFileName, todayDate) {
var targetDate = new Date();
idTimer = window.setTimeout(function () {
objXL.Visible = true;
objXL.WorkBooks.Open(resultFileName);
// 当日日付
objXL.Cells.Range("AB5").Value = todayDate.getFullYear();
objXL.Cells.Range("AE5").Value = todayDate.getMonth() + 1;
objXL.Cells.Range("AH5").Value = todayDate.getDate();
objXL.Cells.Range("AL5").Value = constWeekdays[todayDate.getDay()];
targetDate = getNextWeekDay( todayDate, 1, true, arrHolidays, true );
objXL.Cells.Range("AI48").Value = "'" + formatDate( targetDate, 1 );
// フルバックアップ終了確認 (毎月曜日)
objXL.Cells.Range("AI50").Value = "'" + formatDate( targetDate, 1 );
// 当日の曜日が指定曜日とは異なる場合、未実施を塗りつぶす
if ( !getNextWeekDay( todayDate, 1, true, arrHolidays, false )) {
// 送付 (毎月曜日)
objXL.Cells.Range("W48").Interior.ColorIndex = 0;
objXL.Cells.Range("W48").Interior.Pattern = 1;
objXL.Cells.Range("Z48").Interior.ColorIndex = 1;
objXL.Cells.Range("Z48").Interior.Pattern = 1;
// バックアップ終了確認 (毎月曜日)
objXL.Cells.Range("W50").Interior.ColorIndex = 0;
objXL.Cells.Range("W50").Interior.Pattern = 1;
objXL.Cells.Range("Z50").Interior.ColorIndex = 1;
objXL.Cells.Range("Z50").Interior.Pattern = 1;
}
// 在庫データ送信 (月初実施)
targetDate = getNextMonthFirstDay( todayDate, true, true, true );
objXL.Cells.Range("AI54").Value = "'" + formatDate(targetDate, 1);
// 当日の日付が指定日付とは異なる場合、未実施を塗りつぶす
if ( !getNextMonthFirstDay( todayDate, false, true, false )) {
// JDS在庫データ送信
objXL.Cells.Range("W54").Interior.ColorIndex = 0;
objXL.Cells.Range("W54").Interior.Pattern = 1;
objXL.Cells.Range("Z54").Interior.ColorIndex = 1;
objXL.Cells.Range("Z54").Interior.Pattern = 1;
}
// 月次締め処理 (月末実施)
if (getNextMonthLastDay( todayDate, false, false, false ) == false ) targetDate = getNextMonthLastDay( todayDate, false, false, true ); // 未経過
else targetDate = getNextMonthLastDay( todayDate, true, false, true ); // 当日または既に経過
objXL.Cells.Range("AI56").Value = "'" + formatDate(targetDate, 1);
// 当日の日付が指定日付とは異なる場合、未実施を塗りつぶす
if ( !getNextMonthLastDay( todayDate, false, true, false )) {
// 在庫データ送信
objXL.Cells.Range("W56").Interior.ColorIndex = 0;
objXL.Cells.Range("W56").Interior.Pattern = 1;
objXL.Cells.Range("Z56").Interior.ColorIndex = 1;
objXL.Cells.Range("Z56").Interior.Pattern = 1;
}
// サーバー再起動(第一水曜日)
// 次回実施日の算出
if (getHizukeInMonth( todayDate, 0, 3, true, false, arrHolidays, false ) == -1 ) targetDate = getHizukeInMonth( todayDate, 0, 3, true, false, arrHolidays, true ); // 未経過
else targetDate = getHizukeInMonth( todayDate, 0, 3, true, true, arrHolidays, true ); // 当日または既に経過
objXL.Cells.Range("AI58").Value = "'" + formatDate( targetDate, 1 );
// 当日じゃなかったら、未実施を塗りつぶす
if (getHizukeInMonth( todayDate, 0, 3, true, false, arrHolidays, false ) != 0 ) { // 当日以外
objXL.Cells.Range("W58").Interior.ColorIndex = 0;
objXL.Cells.Range("W58").Interior.Pattern = 1;
objXL.Cells.Range("Z58").Interior.ColorIndex = 1;
objXL.Cells.Range("Z58").Interior.Pattern = 1;
}
// Eサーバー再起動(第三水曜日)
if (getHizukeInMonth( todayDate, 2, 3, true, false, arrHolidays, false ) == -1 ) targetDate = getHizukeInMonth( todayDate, 2, 3, true, false, arrHolidays, true ); // 未経過
else targetDate = getHizukeInMonth( todayDate, 2, 3, true, true, arrHolidays, true ); // 当日または既に経過
objXL.Cells.Range("AI60").Value = "'" + formatDate( targetDate, 1 );
// 当日じゃなかったら、未実施を塗りつぶす
if (getHizukeInMonth( todayDate, 2, 3, true, false, arrHolidays, false ) != 0 ) { // 当日以外
objXL.Cells.Range("W60").Interior.ColorIndex = 0;
objXL.Cells.Range("W60").Interior.Pattern = 1;
objXL.Cells.Range("Z60").Interior.ColorIndex = 1;
objXL.Cells.Range("Z60").Interior.Pattern = 1;
}
// 処理終了メッセージを表示
alert("処理が終了しました。\n\n作成したファイル:\n" + resultFileName + "\n\nExcelを保存・終了して、ファイルを\n親ディレクトリへ移動してください。\n\n");
window.clearTimeout(idTimer);
}, 2000);
}
//=================================================================================================
//次曜日日付を取得
//
//getNextWeekDay( todayDate, // 調査開始日 (Date型)
// targetWeekDay, // 曜日 (0:日曜日~6:土曜日)
// directionFlg, // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
// arrHolidays, // 休日一覧(Date型Array)。事前にgetHolidayList()をコールして初期化しておく。
// opeMode ) // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
// // (同じな場合はtrue, 同じではない場合はfalseを返す))
//
//=================================================================================================
function getNextWeekDay( todayDate, targetWeekDay, directionFlg, arrHolidays, opeMode ) {
// 作業用日付を調査開始日で初期化する
var targetDate = new Date();
targetDate.setTime(todayDate.getTime());
// 調査開始日の曜日を保存しておく
var todayDay = todayDate.getDay();
// 引数で指定された曜日の日付を、一日づつ移動しながら調べる。
for (i=0; i<7; i++) {
targetDate.setTime(targetDate.getTime() + 86400000);
if (targetDate.getDay() == targetWeekDay) break;
};
// 休日処理(一ヵ月分ループする)
// 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
var iDirection = 86400000; // 翌日
if(directionFlg == false) iDirection = -86400000; // 前日
for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
// 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
if ( !(isHoliday( targetDate, arrHolidays)) ) break;
// 休日だった場合、1日のミリ秒分移動する。
targetDate.setTime(targetDate.getTime() + iDirection);
}
// 操作モードがtrueの場合、算出した日付を返す。
if (opeMode) return targetDate;
else {
// 当日の曜日が指定曜日だった場合はtrue, 異なる場合はfalseを返す
if (targetWeekDay == todayDay) return true;
return false;
}
}
//=================================================================================================
//翌月初検索処理
//
//getNextMonthFirstDay( todayDate, // 調査開始日 (Date型)
// nextMonthFlg. // 翌月フラグ (true: 翌月の指定曜日。false: 当月の指定曜日)
// directionFlg, // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
// opeMode ) // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
// // (同じな場合はtrue, 同じではない場合はfalseを返す))
//
//=================================================================================================
function getNextMonthFirstDay( todayDate, nextMonthFlg, directionFlg, opeMode ) {
// 引数の日付から「年」と「月」を抽出し、その月の初めの「日」で初期化した、Date型変数をnewする。
if (nextMonthFlg) var monthOffset = 1;
else var monthOffset = 0;
var targetDate = new Date(todayDate.getYear(), todayDate.getMonth()+monthOffset, 1);
// 休日処理(一ヵ月分ループする)
// 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
var iDirection = 86400000; // 翌日
if(directionFlg == false) iDirection = -86400000; // 前日
for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
// 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
if ( !(isHoliday( targetDate, arrHolidays)) ) break;
// 休日だった場合、1日のミリ秒分移動する。
targetDate.setTime(targetDate.getTime() + iDirection);
}
// 操作モードがtrueの場合、算出した日付を返す。
if (opeMode) return targetDate;
else {
// 当日の日付が指定曜日だった場合はtrue, 異なる場合はfalseを返す
if (todayDate.getTime() == targetDate.getTime()) return true;
return false;
}
}
//=================================================================================================
//翌月末検索処理
//
//getNextMonthLastDay( todayDate, // 調査開始日 (Date型)
// nextMonthFlg. // 翌月フラグ (true: 翌月の指定日。false: 当月の指定日)
// directionFlg, // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
// opeMode ) // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
// // (同じな場合はtrue, 同じではない場合はfalseを返す))
//
//=================================================================================================
function getNextMonthLastDay( todayDate, nextMonthFlg, directionFlg, opeMode ) {
// 引数の日付から「年」と「月」を抽出し、その月の初めの「日」で初期化した、Date型変数をnewする。
if (nextMonthFlg) var monthOffset = 1;
else var monthOffset = 0;
var workDate = new Date(todayDate.getYear(), todayDate.getMonth()+monthOffset, 1);
// その月の最終日を設定する
var monthLastDay = constMonthDays[workDate.getMonth()] + isIntercalaryMonth( workDate );
var targetDate = new Date(workDate.getYear(), workDate.getMonth(), monthLastDay);
// 休日処理(一ヵ月分ループする)
// 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
var iDirection = 86400000; // 翌日
if(directionFlg == false) iDirection = -86400000; // 前日
for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
// 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
if ( !(isHoliday( targetDate, arrHolidays)) ) break;
// 休日だった場合、1日のミリ秒分移動する。
targetDate.setTime(targetDate.getTime() + iDirection);
}
// 操作モードがtrueの場合、算出した日付を返す。
if (opeMode) return targetDate;
else {
// 当日の日付が指定曜日だった場合はtrue, 異なる場合はfalseを返す
if (todayDate.getTime() == targetDate.getTime()) return true;
return false;
}
}
/////////////////////////////
// 次月末検索処理
// mode: true = 次月
// false = 本月
/////////////////////////////
function nextMonthLastDay(fromDate, mode) {
var workDate = new Date();
var targetDate = new Date();
workDate = fromDate;
// if (mode == false) workDate.setDate(1);
// if (mode == true) workDate.setDate(28);
workDate.setDate(1);
workDate.setTime( workDate.getTime() + (86400000 * 50));
workDate.setDate(1);
for (var i=1; i<1800; i++) {
targetDate.setTime( workDate.getTime() - (86400000 * i));
if (decideHolidat( targetDate )) continue;
break;
}
return targetDate;
}
//=================================================================================================
//月内の第x週の指定曜日日付を取得
//
//getHizukeInMonth( todayDate, // 調査開始日 (Date型)
// numWeek, // 第x週の指定 (0スタート)
// targetWeekDay, // 曜日 (0:日曜日~6:土曜日)
// directionFlg, // 非営業日の場合、次日付で探すか、前日付で探すか (true:次日付)
// nextMonthFlg. // 翌月フラグ (true: 翌月の指定曜日。false: 当月の指定曜日)
// arrHolidays, // 休日一覧(Date型Array)。事前にgetHolidayList()をコールして初期化しておく。
// opeMode ) // 操作モード (true: 日付を返す。false: 調査開始日と算出した日付の同異を返す。
// // (同じな場合は0, 経過済みなら1, 未経過なら-1を返す))
//
//=================================================================================================
function getHizukeInMonth( todayDate, numWeek, targetWeekDay, directionFlg, nextMonthFlg, arrHolidays, opeMode ) {
// 引数の日付から「年」と「月」を抽出し、その月の第x週の初めの「日」で初期化した、Date型変数をnewする。
var targetDate = new Date(todayDate.getYear(), todayDate.getMonth(), constNumOfWeeks[numWeek]);
// 翌月フラグがtrueの場合、1ヵ月分時間を進ませる
if (nextMonthFlg) targetDate.setTime(targetDate.getTime() + (constMonthDays[targetDate.getMonth()] * 86400000) + (isIntercalaryMonth( targetDate ) * 86400000));
// 引数で指定された曜日の日付を、一日づつ移動しながら調べる。
for (i=0; i<7; i++) {
if (targetDate.getDay() == targetWeekDay) break;
targetDate.setTime(targetDate.getTime() + 86400000);
};
// 次の日(引数のdirectionFlg次第で翌日または前日)へDateを移動するために、1日分のミリ秒をセットする。
var iDirection = 86400000; // 翌日
if(directionFlg == false) iDirection = -86400000; // 前日
// 休日処理(一ヵ月分ループする)
for (i=0; i<constMonthDays[todayDate.getMonth()] + isIntercalaryMonth( todayDate ); i++) {
// 休日チェックをCallし、当日が休日かを調べ、休日ではない場合はループを終了する。
if ( !(isHoliday( targetDate, arrHolidays)) ) break;
// 休日だった場合、1日のミリ秒分移動する。
targetDate.setTime(targetDate.getTime() + iDirection);
}
// 操作モードがtrueの場合、算出した日付を返す。
if (opeMode) return targetDate;
else {
// 算出した日付と調査開始日が同じ場合は0, 経過済みなら1, 未経過なら-1を返す
if (targetDate.getTime() == todayDate.getTime()) return 0;
if (targetDate.getTime() < todayDate.getTime()) return 1;
return -1;
}
}
//=================================================================================================
//休日ファイルの読込み処理
//
//getHolidayList( arrHolidays ) // 休日ファイルの内容を保持する、Date型Array
//
//=================================================================================================
function getHolidayList( arrHolidays ) {
var holidayListName = "\\\\Kin-storagesrv2\\info-sys\\Private\\SIS\\ksystem\\運用保守\\010_オペレーション日報\\オペレーション日報マスタ\\__HolidayList.txt";
// 休日ファイルを読込み、Date型Arrayに保持する。
if(objFSO.FileExists(holidayListName)) {
// 休日ファイルをオープンする。
var objInputFile = objFSO.OpenTextFile(holidayListName, 1, false, -2);
// 休日ファイルがEOFになるまで、処理を繰返す。
while (!objInputFile.AtEndOfStream) {
// 休日ファイルから1レコード読込む
var LineVal = objInputFile.ReadLine();
// Date型Arrayに保持する。
var holiday = new Date(LineVal);
arrHolidays.push(holiday);
}
}
}
/////////////////////////////
// 休日チェック
// return: true = 休日
// false = 平日
/////////////////////////////
function decideHolidat( targetDate ) {
if (targetDate.getDay() == 0 || targetDate.getDay() == 6) return true;
for (var i=0; i<arrHolidays.length; i++) {
if(arrHolidays[i].getTime() == targetDate.getTime()) return true;
}
return false;
}
function PausedSection() {
alert("waite後");
window.clearTimeout(idTimer);
}
//==================================================================
// 休日チェック
// isHoliday( targetDate, // 調査日付 (Date型)
// arrHolidays ) // 休日リスト (Date型Array)
//
// return: true = 休日
// false = 平日
//==================================================================
function isHoliday( targetDate, arrHolidays) {
// 曜日が土日の場合、「休日」を返す。
if (targetDate.getDay() == 0 || targetDate.getDay() == 6) return true;
// 休日リストを検索し、同じ日付があれば「休日」を返す。
for (var i=0; i<arrHolidays.length; i++) {
if(arrHolidays[i].getTime() == targetDate.getTime()) return true;
}
// 平日を返す。
return false;
}
//==================================================================
// 閏月チェック
//
// constMonthDaysで月別の満日数を定義しているが、このままでは閏月が
// 考慮されていないため、このfunctionを共有することで閏月に対応する。
//
// isIntercalaryMonth( targetDate ) // 調査日付 (Date型)
//
// return: 1 = 閏月
// 0 = 普通の月
//==================================================================
function isIntercalaryMonth( targetDate ) {
if ( (targetDate.getYear() % 4) == 0 && targetDate.getMonth() == 1) return 1;
else return 0;
}
新真打となった中で、林家たけ平って人が今日のトリを勤める。九代目林家正蔵師匠の一番弟子だそうだ。
末廣亭は昼夜の入替えがないので、直ぐ近所にある伊勢丹の開店時間の10:30に到着するように家を出る。伊勢丹のデパ地下で弁当を2食分買って行列に並ぶ。寄席の中で飲食ができるし(飲酒は禁止)持込みも可なので、近所のスーパーで買ったペットボトルのお茶2本とこの弁当でしのぎならが、12時前の前座さんから21時過ぎの夜席のトリまで、木戸銭¥3,000-でたっぷり楽しめるのだ。
2年ぶりの真打昇進披露口上だったけど、何度観ても縁起物って感じで楽しいのだ。また来年も来たいなぁ。
寄席: 新宿末廣亭
住所: 東京都新宿区新宿3-6-12