1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 20:50:04 +08:00
SpaceVim/bundle/gina.vim/autoload/gina/core/timestamper.vim

60 lines
1.8 KiB
VimL

let s:DateTime = vital#gina#import('DateTime')
function! gina#core#timestamper#new(...) abort
let timestamper = extend({
\ 'now': s:DateTime.now(),
\ 'months': 3,
\ 'format1': '%d %b',
\ 'format2': '%d %b, %Y',
\}, get(a:000, 0, {})
\)
let timestamper = extend(timestamper, s:timestamper, 'keep')
let timestamper._cache_timezone = {}
let timestamper._cache_datetime = {}
let timestamper._cache_timestamp = {}
return timestamper
endfunction
" Timestamper ----------------------------------------------------------------
let s:timestamper = {}
function! s:timestamper.timezone(timezone) abort
if has_key(self._cache_timezone, a:timezone)
return self._cache_timezone[a:timezone]
endif
let timezone = s:DateTime.timezone(a:timezone)
let self._cache_timezone[a:timezone] = timezone
return timezone
endfunction
function! s:timestamper.datetime(epoch, timezone) abort
let cname = a:epoch . a:timezone
if has_key(self._cache_datetime, cname)
return self._cache_datetime[cname]
endif
let timezone = self.timezone(a:timezone)
let datetime = s:DateTime.from_unix_time(a:epoch, timezone)
let self._cache_datetime[cname] = datetime
return datetime
endfunction
function! s:timestamper.format(epoch, timezone) abort
let cname = a:epoch . a:timezone
if has_key(self._cache_timestamp, cname)
return self._cache_timestamp[cname]
endif
let datetime = self.datetime(a:epoch, a:timezone)
let timedelta = datetime.delta(self.now)
if timedelta.duration().months() < self.months
let timestamp = timedelta.about()
elseif datetime.year() == self.now.year()
let timestamp = datetime.strftime(self.format1)
else
let timestamp = datetime.strftime(self.format2)
endif
let self._cache_timestamp[cname] = timestamp
return timestamp
endfunction