mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 20:50:04 +08:00
60 lines
1.8 KiB
VimL
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
|