00318 01/02/13 10:45 RE:00317 "getdate で取得した日付の一週
投稿者 : iceaxs   コメントを投稿する

すみません。iceaxeです。
回答がおそくなりましてすみません。


まだまだ、初心者であるため、helpを見ても理解できないところが
あったりして失礼な投稿をしてしまいましたけども、大森鉄工所さんの
注釈が入り少し理解できたかと思っています。

まだまだスクリプト作成の初心者ではありますが、よろしくお願いします。

ありがとうございました。






>こんにちは。  
>
>プログラミング関係の仕事をされている方には初歩の初歩なのかも知れま
>せん。  
>でも、いざ無から作ろうと思うとちょっと大変。私が我流で作ったのはこ
>んな感じです。良かったら使ってください。  
>( 何10万年も過去や未来の計算はできません。
>  0年は 紀元前 1年、-1年は 紀元前 2年です )
>
>
>;datetolinear と lineeartodate
>
>beginloop   ; 動作check
>    input "年月日 001231 or 2000/12/31", #date
>    if( #date == "" or cancel ) exit
>    datetolinear #date, ##datel
>    if( search( #date, "/" ) == "" )
>        call datetolinear, #date
>    else
>        call datetolinear8, #date
>    endif
>    ##lind = value( #return )
>    message "script func:^I" + ##lind + "^Mdatetolinear:^I" + ##datel
>    call lineartoweek, ##lind
>    #week = #return
>    call lineartodate, ##lind
>    message #date + "^M" + #return + " " + #week
>endloop
>
>datetolinear8:  ;リニア化 type 99/12/31
>    ##f = 1
>    goto datetolinear_p1
>datetolinear10: ;リニア化 type 1999/12/31
>    ##f = 0
>datetolinear_p1:
>    #s = tohankaku( #1 )
>    ##i = 3
>    while( 0 < ##i )
>        ##i = ##i - 1
>        ##p[ ##i ] = value( #s )
>        #s = search( #s, "/" )
>        if( #s == "" )
>            #s = "1"
>        else
>            #s = part( #s, 1, 255 )
>        endif
>    endwhile
>    if( 0 < ##f )
>        if( 0 <= ##p[2] and ##p[2] < 100 )
>            ##p[2] = ( ##p[2] + 20 ) % 100 + 1980
>        endif
>    endif
>    call datetolinear_f, ##p[2], ##p[1], ##p[0]
>return #return
>
>datetolinear:   ;リニア化 type 991231
>    call datetolinear_f, \
>        ( value( part( #1, 0, 2 ) ) + 20 ) % 100 + 1980, \
>        part( #1, 2, 2 ), part( #1, 4, 2 )
>return #return
>
>datetolinear_f: ;年, 月, 日 1980/01/01からの経過日数に変換
>    ##b = value( #2 )
>    ##a = ( ##b + 17638463 ) / 12 - 1469872
>    ##b = - ##a * 12 + ##b + 9
>    ##a = ( ##b - 17 ) / 6 + value( #1 ) + ##a + 732800
>return "" + ( \
>    ( ##b % 12 * 153 + 2 ) / 5 + ( ##a * 1461 / 4 ) \
>    - ( ##a / 100 ) + ( ##a / 400 ) \
>    + value( #3 ) - 268372825 \
>)
>
>lineartoweek:   ;日付リニア値から曜日を求める
>return part( "日月火水木金土", ( value( #1 ) + 268372827 ) % 7 * 2, 2 )
>lineartoweek_e:
>return part( "SunMonTueWedThuFriSat", ( value( #1 ) + 268372827 ) % 7 * 3, 3 )
>
>lineartodate10: ;戻し type 1999/12/31
>    #rp = "lineartodate_p2"
>    goto lineartodate_f
>lineartodate_p2:
>    #s = "0" + ##c
>    #s = "0" + ##b + "/" + part( #s, length( #s ) - 2, 2 )
>    #s = "" + ##a + "/" + part( #s, length( #s ) - 5, 5 )
>    if( 0 <= ##a and ##a < 1000 )
>        #s = "000" + #s
>        #s = part( #s, length( #s ) - 10, 10 )
>    endif
>return #s
>
>lineartodate:   ;戻し type 991231
>    #rp = "lineartodate_p1"
>    goto lineartodate_f
>lineartodate_p1:
>    #s = "0" + ( ( ##a * 100 + ##b ) * 100 + ##c )
>return part( #s, length( #s ) - 6, 6 )
>
>lineartodate_f: ;日付リニア値を一般形式に戻す
>    ##c = value( #1 ) + 268372824   ; 723120+267649704= 268372824
>    ##a = ( ##c * 4 + 3 ) / 146097
>    ##c = - ##a * 146097 / 4 + ##c
>    ##e = ( ##c * 4 + 3 ) / 1461
>    ##c = - ##e * 1461 / 4 + ##c
>    ##b = ( ##c * 5 + 2 ) / 153
>    ##c = - ( ##b * 153 + 2 ) / 5 + 1 + ##c
>    ##a = ##a * 100 + ##e + ( ##b / 10 ) - 732800
>    ##b = ( ##b + 2 ) % 12 + 1
>goto #rp


新規に投稿する