|
TAKA です。
>秀丸で、日付の計算をするにはどうすればよいのでしょうか。
>具体的には、今日を基準に2週間前までの日付を配列に格納する、という処理をした
>いのです。
その後、解決したでしょうか?
まだ解決していないようでしたら、以下のマクロを使ってみて下さ
い。
マクロを実行した日より2週間前までの日付を配列に格納します。
格納した配列をもとに、マクロを実行した秀丸に、14日分の日付
を挿入します。
「GetDateOffset」の第2引数にオフセットを指定しますが、オフ
セット数は少なければ少ないほど速いので、以下のように「-1」を
指定出来るようにした方が良いです。
多少プログラムの経験があるとのことですので、他は説明不要だと
思いますが、何かありました、また質問して下さい。
// サンプルマクロ(ここから)
$DateWk = year + "/" + month + "/" + day + "(" + dayofweek + ")";
#I = 0;
while( #I < 14 )
{
call GetDateOffset $DateWk, -1;
$DateWk = $$return;
$DateTbl[#I] = $DateWk;
#I = #I + 1;
}
#I = 0;
while( #I < 14 )
{
insert $DateTbl[#I] + "\n";
#I = #I + 1;
}
endmacro;
GetDateOffset:
##DayTbl[0] = 31; // 1月
##DayTbl[1] = 28; // 2月(閏年でない場合)
##DayTbl[2] = 31; // 3月
##DayTbl[3] = 30; // 4月
##DayTbl[4] = 31; // 5月
##DayTbl[5] = 30; // 6月
##DayTbl[6] = 31; // 7月
##DayTbl[7] = 31; // 8月
##DayTbl[8] = 30; // 9月
##DayTbl[9] = 31; // 10月
##DayTbl[10] = 30; // 11月
##DayTbl[11] = 31; // 12月
$$WeekTbl = "日月火水木金土";
$$ZeroTbl = "0000";
##Year = val( leftstr( $$1, 4 ) ); // 年
##Month = val( midstr( $$1, 5, 2 ) ); // 月
##Day = val( midstr( $$1, 8, 2 ) ); // 日
##Week = strstr( $$WeekTbl, midstr( $$1,11, 2 ) ) / 2; // 曜
##YearWk = ##Year;
##MonthWk = ##Month;
##DayWk = ##Day;
##WeekWk = ##Week;
if( ##2 >= 0 )
{ // 加算
##I = 0;
while( ##I < ##2 )
{
if( ( ##MonthWk == 2 ) || ( ##DayWk == 28 ) )
{ // 2月28日
call UruuChk ##YearWk;
if( ##return ) ##DayTbl[1] = 29; // 閏年
else ##DayTbl[1] = 28; // 閏年でない
}
if( ##DayWk >= ##DayTbl[##MonthWk-1] )
{ // 月の最終日
##DayWk = 1;
if( ##MonthWk >= 12 )
{ // 年の最終月
##MonthWk = 1;
##YearWk = ##YearWk + 1;
}
else
{
##MonthWk = ##MonthWk + 1;
}
}
else
{
##DayWk = ##DayWk + 1;
}
##I = ##I + 1;
}
##WeekWk = ( ##WeekWk + ##2 ) % 7;
}
else
{ // 減算
##I = 0;
while( ##I > ##2 )
{
if( ( ##MonthWk == 3 ) || ( ##DayWk == 1 ) )
{ // 3月1日
call UruuChk ##YearWk;
if( ##return ) ##DayTbl[1] = 29; // 閏年
else ##DayTbl[1] = 28; // 閏年でない
}
if( ##DayWk <= 1 )
{ // 月の最初日
if( ##MonthWk <= 1 )
{ // 年の最初月
##MonthWk = 12;
##YearWk = ##YearWk - 1;
}
else
{
##MonthWk = ##MonthWk - 1;
}
##DayWk = ##DayTbl[##MonthWk-1];
}
else
{
##DayWk = ##DayWk - 1;
}
##I = ##I - 1;
}
##WeekWk = ( ( ( ( ##WeekWk + ##2 ) % 7 ) + 7 ) % 7 );
}
// 年
$$Dayte = "";
$$Wk = str( ##YearWk );
$$Dayte = $$Dayte + leftstr( $$ZeroTbl, 4 - strlen( $$Wk ) ) + $$Wk;
// 月
$$Wk = str( ##MonthWk );
$$Dayte = $$Dayte + "/" + leftstr( $$ZeroTbl, 2 - strlen( $$Wk ) ) + $$Wk;
// 日
$$Wk = str( ##DayWk );
$$Dayte = $$Dayte + "/" + leftstr( $$ZeroTbl, 2 - strlen( $$Wk ) ) + $$Wk;
// 曜
$$Dayte = $$Dayte + "(" + midstr( $$WeekTbl, ##WeekWk * 2, 2 ) + ")";
return $$Dayte;
UruuChk:
##RC = false;
if( ##1 % 4 == 0 )
{ // 4で割り切れる
if( ##1 % 100 == 0 )
{ // 100で割り切れる
if( ##1 % 400 == 0 )
{ // 400で割り切れる(閏年)
##RC = true;
}
}
else
{ // 閏年
##RC = true;
}
}
return ##RC;
// サンプルマクロ(ここまで)
|
|