SubtractDate関数に年月の追加の要望No.47267
styth さん 14/12/31 08:38
 
 SubtractDate関数に、年と月の差を返すパラメータを追加して頂けないでしょ
うか?
 御検討下さい。よろしくお願いします。

[ ]
RE:47267 SubtractDate関数に年月の追加のNo.47268
秀まるお2 さん 14/12/31 15:22
 
 年や月の差を計算するのは元々そんなに難しくないので、SubtractDate関数で
出来なくても普通に以下のようにして計算すればいいと思います。

    loaddll "tkinfo.dll";
    $date1 = "Wed, 31 Dec 2014 08:38:47 +0900";     //例
    $date2 = "Mon, 20 May 2013 15:03:53 +0900";     //例

    //前準備
    #year1 =  val(dllfuncstr("FormatDate", $date1, "YYYY"));
    #year2 =  val(dllfuncstr("FormatDate", $date2, "YYYY"));
    #month1 =  val(dllfuncstr("FormatDate", $date1, "MM"));
    #month2 =  val(dllfuncstr("FormatDate", $date2, "MM"));

    //年の違い計算
    #yeardiff = #year1 - #year2;
    message str(#yeardiff);

    //月の違い計算
    #monthdiff = (#year1 * 12 + #month1) - (#year2 * 12 + #month2);
    message str(#monthdiff);


 日数の差を計算するには一ヶ月が何日かが関係してくるために非常にややこし
くて、マクロで計算させるのが至難の業になります。それでSubtractDate関数を
用意しています。マクロで普通に計算できる物をあえて関数を用意するのは秀丸
メール側の開発の手間が大変なのて、簡単に出来ることはマクロの方でやって欲
しいです。

[ ]
RE:47268 SubtractDate関数に年月の追加のNo.47270
styth さん 14/12/31 20:51
 
 具体的にやりたいことは、今日からある将来の日付までの年月を求めたいので
すが、
 上記マクロの
 $date1 = "Wed, 31 Dec 2014 08:38:47 +0900";  //例

 ここを、"2024/01/15"のようにして、計算したいのですが、どう直せば良いん
でしょうか?
 表示は、「何年+何ヵ月」という形にしたいです。(精度は、月単位で日数ま
での精度はいりません)
 よろしくお願いします。

[ ]
RE:47270 SubtractDate関数に年月の追加のNo.47271
K'zawa さん 15/01/01 12:03
 
stythさん、こんにちは。
K'zawa/ユーザーです。

> 具体的にやりたいことは、今日からある将来の日付までの年月を求めたいので
>すが、

この条件だと、メールとかメールヘッダー形式の日付とか関係ないような気もし
ますが。

// 今日の年月
#year1 = val(year);
#month1 = val(month);

// 未来の年月
$s = input("年月を YYYY/MM 形式で入力", year + "/" + month );
#year2 = val($s);
#n = strstr($s, "/");
#month2 = val(midstr($s, #n+1));

// 差
#def = (#year2 - #year1) * 12 + (#month2 - #month1);
message str(#def / 12) + "年" + str(#def % 12) + "ヶ月後";

[ ]
RE:47270 SubtractDate関数に年月の追加のNo.47272
秀まるお2 さん 15/01/01 12:13
 
 FormatDateやSubtractDate関数は、基本的にはDate:ヘッダでの形式で日時を
指定してもらわないとダメですが、その"2024/01/15"の文字列をそのまま渡して
も、ちゃんと2024年の1月15日と解釈します。 メールのDate:ヘッダにはいろい
ろイレギュラーなケースがあって、そういうおかしいメールでもうまく日時を解
釈してくれって話が今まで何度もありまして、大抵は期待通りの結果が得られる
と思います。

 しいて、Date:ヘッダの形式で確実に指定したいなら、「何月」の所を数字じ
ゃなくて、

  Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec

 って文字列で指定して、「日 月 年」の順にするのがベストです。

    15 Jan 2025

 なら間違いなく正しく解釈されます。

>  表示は、「何年+何ヵ月」という形にしたいです。(精度は、月単位で日数ま
> での精度はいりません)

 おおよその計算でければ、日数を30で割って、それをさらに12で割った値を年
で表示したらいいんじゃないでしょうか。

    #day = dllfunc("SubtractDate", ....);
    #mon = #day / 30;
    #year = #mon / 12;
    #mon = #mon % 12;
    message str(#year) + "年" + str(#mon) + "ヶ月"

 みたいな感じで十分じゃないかと思います。(テストまではしてませんが)

[ ]
RE:47272 SubtractDate関数に年月の追加のNo.47273
styth さん 15/01/02 18:01
 
 できました。ありがとうございます。

[ ]