/sources_non_forked/tlib/autoload/tlib/date.vim

https://gitlab.com/jeichert/vimrc · Vim Script · 120 lines · 97 code · 10 blank · 13 comment · 44 complexity · 0144aa8efba767fce609c9bd1bbeff4a MD5 · raw file

  1. " date.vim
  2. " @Author: Tom Link (mailto:micathom AT gmail com?subject=[vim])
  3. " @Website: http://www.vim.org/account/profile.php?user_id=4037
  4. " @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
  5. " @Created: 2010-03-25.
  6. " @Last Change: 2010-09-17.
  7. " @Revision: 0.0.34
  8. if !exists('g:tlib#date#ShortDatePrefix') | let g:tlib#date#ShortDatePrefix = '20' | endif "{{{2
  9. if !exists('g:tlib#date#TimeZoneShift') | let g:tlib#date#TimeZoneShift = 0 | endif "{{{2
  10. let g:tlib#date#dayshift = 60 * 60 * 24
  11. " :display: tlib#date#DiffInDays(date1, ?date2=localtime(), ?allow_zero=0)
  12. function! tlib#date#DiffInDays(date, ...)
  13. let allow_zero = a:0 >= 2 ? a:2 : 0
  14. let s0 = tlib#date#SecondsSince1970(a:date, 0, allow_zero)
  15. let s1 = a:0 >= 1 ? tlib#date#SecondsSince1970(a:1, 0, allow_zero) : localtime()
  16. let dd = (s0 - s1) / g:tlib#date#dayshift
  17. " TLogVAR dd
  18. return dd
  19. endf
  20. " :display: tlib#date#Parse(date, ?allow_zero=0) "{{{3
  21. function! tlib#date#Parse(date, ...) "{{{3
  22. let min = a:0 >= 1 && a:1 ? 0 : 1
  23. " TLogVAR a:date, min
  24. let m = matchlist(a:date, '^\(\d\{2}\|\d\{4}\)-\(\d\{1,2}\)-\(\d\{1,2}\)$')
  25. if !empty(m)
  26. let year = m[1]
  27. let month = m[2]
  28. let days = m[3]
  29. else
  30. let m = matchlist(a:date, '^\(\d\+\)/\(\d\{1,2}\)/\(\d\{1,2}\)$')
  31. if !empty(m)
  32. let year = m[1]
  33. let month = m[3]
  34. let days = m[2]
  35. else
  36. let m = matchlist(a:date, '^\(\d\{1,2}\)\.\s*\(\d\{1,2}\)\.\s*\(\d\d\{2}\|\d\{4}\)$')
  37. if !empty(m)
  38. let year = m[3]
  39. let month = m[2]
  40. let days = m[1]
  41. endif
  42. endif
  43. endif
  44. if empty(m) || year == '' || month == '' || days == '' ||
  45. \ month < min || month > 12 || days < min || days > 31
  46. echoerr 'TLib: Invalid date: '. a:date
  47. return []
  48. endif
  49. if strlen(year) == 2
  50. let year = g:tlib#date#ShortDatePrefix . year
  51. endif
  52. return [0 + year, 0 + month, 0 + days]
  53. endf
  54. " tlib#date#SecondsSince1970(date, ?daysshift=0, ?allow_zero=0)
  55. function! tlib#date#SecondsSince1970(date, ...) "{{{3
  56. let allow_zero = a:0 >= 2 ? a:2 : 0
  57. " TLogVAR a:date, allow_zero
  58. let date = tlib#date#Parse(a:date, allow_zero)
  59. if empty(date)
  60. return 0
  61. endif
  62. let [year, month, days] = date
  63. if a:0 >= 1 && a:1 > 0
  64. let days = days + a:1
  65. end
  66. let days_passed = days
  67. let i = 1970
  68. while i < year
  69. let days_passed = days_passed + 365
  70. if i % 4 == 0 || i == 2000
  71. let days_passed = days_passed + 1
  72. endif
  73. let i = i + 1
  74. endwh
  75. let i = 1
  76. while i < month
  77. if i == 1
  78. let days_passed = days_passed + 31
  79. elseif i == 2
  80. let days_passed = days_passed + 28
  81. if year % 4 == 0 || year == 2000
  82. let days_passed = days_passed + 1
  83. endif
  84. elseif i == 3
  85. let days_passed = days_passed + 31
  86. elseif i == 4
  87. let days_passed = days_passed + 30
  88. elseif i == 5
  89. let days_passed = days_passed + 31
  90. elseif i == 6
  91. let days_passed = days_passed + 30
  92. elseif i == 7
  93. let days_passed = days_passed + 31
  94. elseif i == 8
  95. let days_passed = days_passed + 31
  96. elseif i == 9
  97. let days_passed = days_passed + 30
  98. elseif i == 10
  99. let days_passed = days_passed + 31
  100. elseif i == 11
  101. let days_passed = days_passed + 30
  102. endif
  103. let i = i + 1
  104. endwh
  105. let seconds = (days_passed - 1) * 24 * 60 * 60
  106. let seconds = seconds + (strftime('%H') + g:tlib#date#TimeZoneShift) * 60 * 60
  107. let seconds = seconds + strftime('%M') * 60
  108. let seconds = seconds + strftime('%S')
  109. return seconds
  110. endf