日付、時間の計算
作者: 小見 拓
—
最終変更
2012年01月08日 12時10分
日付、時間の計算
- localtime()は1970年からの秒を返す。strftime()で文字列表記に変換できる。
:let now = localtime()
:echo now
"# => 1203574847
:echo strftime("%Y/%m/%d %H:%M:%S", now)
"# => 2008/02/21 15:20:47
- 1時間前。
:let hour = (60 * 60)
:echo strftime("%Y/%m/%d %H:%M:%S", now - hour)
"# => 2008/02/21 14:20:47
- 1日前。
:let day = (60 * 60 * 24)
:echo strftime("%Y/%m/%d %H:%M:%S (%A)", now - day)
"# => 2008/02/20 15:20:47 (水曜日)
- 31日前。
:let month = (60 * 60 * 24 * 31)
:echo strftime("%Y/%m/%d %H:%M:%S (%A)", now - month)
"# => 2008/01/21 15:20:47 (月曜日)
- 365日前。
:let year = (60 * 60 * 24 * 365)
:echo strftime("%Y/%m/%d %H:%M:%S (%A)", now - year)
"# => 2007/02/21 15:20:47 (水曜日)
- 日付から経過秒数をとる(日本時間)。
:function! Localtime(year, month, day, hour, minute, second)
" days from 0000/01/01
:let l:year = a:month < 3 ? a:year - 1 : a:year
:let l:month = a:month < 3 ? 12 + a:month : a:month
:let l:days = 365*l:year + l:year/4 - l:year/100 + l:year/400 + 306*(l:month+1)/10 + a:day - 428
" days from 0000/01/01 to 1970/01/01
" 1970/01/01 == 1969/13/01
:let l:ybase = 1969
:let l:mbase = 13
:let l:dbase = 1
:let l:basedays = 365*l:ybase + l:ybase/4 - l:ybase/100 + l:ybase/400 + 306*(l:mbase+1)/10 + l:dbase - 428
" seconds from 1970/01/01
:return (l:days-l:basedays)*86400 + (a:hour-9)*3600 + a:minute*60 + a:second
:endfunction
:let ltime = Localtime(2008, 2, 23, 14, 23, 0)
:echo ltime
:echo strftime("%Y/%m/%d %H:%M:%S (%A)", ltime)
"# => 1203744180
"# => 2008/02/23 14:23:00 (土曜日)
- 経過秒数から日付、時間、曜日表示。
:function! Localtime(year, month, day, hour, minute, second)
" days from 0000/01/01
:let l:year = a:month < 3 ? a:year - 1 : a:year
:let l:month = a:month < 3 ? 12 + a:month : a:month
:let l:days = 365*l:year + l:year/4 - l:year/100 + l:year/400 + 306*(l:month+1)/10 + a:day - 428
" days from 0000/01/01 to 1970/01/01
" 1970/01/01 == 1969/13/01
:let l:ybase = 1969
:let l:mbase = 13
:let l:dbase = 1
:let l:basedays = 365*l:ybase + l:ybase/4 - l:ybase/100 + l:ybase/400 + 306*(l:mbase+1)/10 + l:dbase - 428
" seconds from 1970/01/01
:return (l:days-l:basedays)*86400 + (a:hour-9)*3600 + a:minute*60 + a:second
:endfunction
:let ltime = Localtime(2008, 2, 23, 14, 23, 0)
:echo strftime("%Y/%m/%d", ltime)
"# => 2008/02/23
:echo strftime("%H:%M:%S", ltime)
"# => 14:23:00
:echo strftime("%Y/%m/%d %H:%M:%S", ltime)
"# => 2008/02/23 14:23:00
:echo strftime("%B", ltime)
"# => 2月
:echo strftime("%b", ltime)
"# => 2
:echo strftime("%a", ltime)
"# => 土
:echo strftime("%A", ltime)
"# => 土曜日

