[三流君] −−>
[ASPで遊ぶ、失敗する] −−>
[バックナンバー一覧]
−−> No.062 日付関係の復習、YYYYMMDDを返すFunction関数を作成する
日付関係の復習、YYYYMMDDを返すFunction関数を作成する
本文(発行内容)
<日付関係の復習、YYYYMMDDを返すFunction関数を作成する>
こんにちは、三流プログラマーのKen3です。
今回は、
日付、時刻関係の関数の復習
と
VBScriptにVBAでよく愛用していたFormat関数が使えないので、
自作でYYYYMMDDを返すFunction関数を作成してみます。
/*
* 1.今回のキッカケ
*/
HPで訪問者のログを収集してます。
http://www.ken3.org/cgi-bin/cnt/log100.asp
リンク元、GoogleやYahooからの探し物のお客さんが意外と多いです。
で、最近、よく見かけるのが、
http://www.google.co.jp/search?hl=ja&ie=UTF-8&q=ASP+Format&lr=lang_ja
と
ASP Formatとキーワードにして私のページにたどり着く人です。
ADO から MDB へのSQL文でFormat関数使用
http://www.ken3.org/cgi-bin/test/test040-1.asp
が、検索に引っかかってしまいます。
ADOのSQL文で使用可能な例題、
Select Format(WriteTime, 'YYYYMMDD') AS YYYYMMDD, Count(*) AS CNT
From log
GROUP BY Format(WriteTime, 'YYYYMMDD')
が拾われてしまうみたいです。
※Format関数、ASP(VBScript)には無いです、
そして、訪問者は、
ちぇ、期待してきたけど時間つぶしてしまった。。。
~~~~~~~~~~
と去って行くのであった。(マル)
少しでもお客さんを取り込むには、品揃えを充実させよう。
ってことで、復習を兼ねてYYYYMMDDを返す自作関数を作ってみます。
※Format関数って、12.5とか数値も扱ってたし、yyyy-mm-dd形式も?
って心の中で叫ばないでね・・・
/*
* 2.事前調査、各部分を取り出す関数を調べる
*/
ASP,VBScriptでFormat関数使えないんだよなぁ。。。
日付関係の関数を駆使して、文字列を作成するか。
えっと、現在時刻はNow関数でわかるから、
あとはこれを変換しながら、調べた関数をチェックしますか。
年 Year()
月 Month()
日 Day()
曜日 Weekday() 1:日曜〜7:土曜の数値を返す WeekDayName(数値)で曜日文字
時 Hour()
分 Minute()
秒 Second()
と、いろいろな変換関数存在するので、
関数に日付の値を渡すと変換できそうです。
http://www.ken3.org/cgi-bin/test/test062-1.asp
で、下記のテストプログラムを実行可能です。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>VBScript/Year/Month/Day/WeekDay/Hour/Minute/Secound 関数使用例</title>
</head>
<body>
<h2>VBScript関数<br>Year/Month/Day/WeekDay/Hour/Minute/Secound 関数使用例</h2>
<!-- Ken3 --><!-- #include file="info.inc" -->
<br>
現在時刻を返すNow関数と組み合わせて下記の関数を使用してみました。<br>
<hr>
年 Year(変数や値)=<%=Year(Now)%><br>
月 Month(変数や値)=<%=Month(Now)%><br>
日 Day(変数や値)=<%=Day(Now)%><br>
曜日 Weekday(変数や値)=<%=Weekday(Now)%>(←1:日曜〜7:土曜の数値)<br>
曜日の名前 WeekdayName(1〜7)=<%=WeekdayName(Weekday(Now))%><br>
※通常日付を渡すんだけど、↑WeekdayNameだけ数値に対応した曜日文字を返す<br>
<hr>
時 Hour(変数や値)=<%=Hour(Now)%><br>
分 Minute(変数や値)=<%=Minute(Now)%><br>
秒 Second(変数や値)=<%=Second(Now)%><br>
<hr>
<br>
</body>
</html>
/*
* 3.2003/6/5を20030605と一桁の月日は頭0を付ける
*/
あとは組み合わせて、一桁の時、頭0付けかぁ。
Right("0" & 変数, 2)
と小細工で、0と+してから、右端から2文字取るかな。
T = Now()
strMM = Right("0" & Month(T)), 2)
strDD = Right("0" & Day(T)), 2)
YYYYMMDD = Year(T) & strMM & strDD
うわ、なんかダサ(笑)
ここまで来たら、関数名もFormatYYMMDD(引数)でイイヤ
値を返すんだからFunctionの関数にしてと、
下記のようにしてみました。
http://www.ken3.org/cgi-bin/test/test062-1.asp
で、下記のテストプログラムを実行可能です。
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>YYYYMMDDの文字列を返す関数を作ってみた</title>
</head>
<body>
<h2>YYYYMMDDの文字列を返す関数を作ってみた</h2>
<!-- Ken3 --><!-- #include file="info.inc" -->
<br>
日付を渡すと、YYYYMMDDの形式で文字列を返す関数<br>
その名もFormatYYYYMMDD(笑)<br>
<hr>
FormatYYYYMMDD(Now)は<%=FormatYYYYMMDD(Now)%>と変換される。<br>
ログファイル名を作るときは、<br>
strLOGNAME = FormatYYYYMMDD(Now()) & ".log" なんて使う<br>
<%
strLOGNAME = FormatYYYYMMDD(Now()) & ".log"
%>
<%=strLOGNAME%><br>
<hr>
なんかなぁ、、、もっと勉強して、使える関数作らないとなぁ。<br>
<hr>
<br>
<!-- Ken3 --><% Call OUT_SRC("") 'ソースの表示関数を呼ぶ %>
<!-- Ken3 --><!-- #include file="inc_mokuji.inc" -->
</body>
</html>
<!-- Ken3 --><!-- #include file="out_src.inc" -->
<%
'受け取った日付データを変換してYYYYMMDDの文字列で返す
Function FormatYYYYMMDD(cnvMOTO)
'念のため日付型に変換可能かチェックする
If IsDate(cnvMOTO) = False Then
FormatYYYYMMDD = "" '変換エラーの時は空文字を返すようにする
Else
strMM = Right("0" & Month(cnvMOTO), 2) '月の変換
strDD = Right("0" & Day(cnvMOTO), 2) '日の変換
'リターン値で結果を返す
FormatYYYYMMDD = Year(cnvMOTO) & strMM & strDD
End If
End Function |
%>
頻繁に、変換処理しないと、あまり関数化の意味無いかなぁ。
/*
* 4.終わりの挨拶 </HTML>
*/
ほんとは、偽のSQL文とか使って、
ADOでFormat関数を使えないかなぁと探ったけど、断念しました。
で、
なんか今回は、単なる日付関数紹介でした。
何かの参考となれば幸いです。
素朴な疑問やリクエスト、クレームなどがあったら、
掲示板 : http://www.ken3.org/cgi-bin/bbs/asp/wforum.cgi
に気軽に書き込んでください。
ASP、VBScript勉強中の三流プログラマーのKen3でした。
フィードバック
ASP系の→[掲示板]←を覗く、質問を書き込む
評価・感想
三流君の主なリンク先
[アクセスランキング]
[サイトマップ]
[リンク先・相互リンク先など]
Ken3の日記(weblog) --
[広告・副収入系]
[プログラマー業務の愚痴]
[VBA系の話題]
[ASP系の話題]
[コンビニ系ネタ]
[その他]
その他 宣伝広告