Advertisement
Guest User

Untitled

a guest
Feb 13th, 2016
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.85 KB | None | 0 0
  1.  
  2.  
  3. let mapZenHan = () => {
  4. let zen = ' 0123456789.,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY!?.,’”!#$%&’()=|‘@{}[]-*+:;¥_/?.,><'.split('');
  5. let han = ' 0123456789.,abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY!?.,\'"!#$%&\'()=|`@{}[]-*+:;\\_/?.,><'.split('');
  6. let map = [];
  7. for (let i = 0, len = src.length; i < len; i++) {
  8. map.push([new RegExp(zen[i], 'g')], han[i])
  9. }
  10. return map;
  11. };
  12.  
  13.  
  14. /**
  15. * 与えられた文字列を日付として評価して、Date Object を返す。
  16. * 評価できない場合、false を返す。
  17. *
  18. * @param String string 日付として評価する文字列。
  19. * @return Date
  20. */
  21. export function parse(string) {
  22.  
  23. if (!string) return null;
  24.  
  25. //全角を半角に
  26. string = ((s) => {
  27. for (let i = 0, len = mapZenHan.length; i < len; i++) {
  28. let [ matcher, replace ] = mapZenHan[i];
  29. s = s.replace(matcher, replace);
  30. }
  31. return s;
  32. })(string);
  33.  
  34. //空白で分割
  35. let src = string.split(/[ ]+/);
  36. let dsrc = '';
  37. let tsrc = '';
  38.  
  39. //入力文字列の整理
  40. if (src.length == 1)
  41. {
  42. dsrc = src.shift();
  43. tsrc = '';
  44.  
  45. if (dsrc.search(/:/) != -1) {
  46. tsrc = dsrc;
  47. dsrc = '';
  48. }
  49. }
  50. else if (src.length >= 2)
  51. {
  52. dsrc = src.shift();
  53. tsrc = src.shift();
  54. let other = src.shift();
  55.  
  56. //2つ目に数字が含まれて無い場合、3つ目に数字が含まれれば3つ目を使用。3つ目も数字が無ければ、時間指定無し
  57. if (!tsrc.match(/\d+/g)) {
  58. tsrc = (other && other.match(/\d+/g)) ? other : '';
  59. }
  60. }
  61.  
  62. //評価の材料として現在の日時を準備
  63. let today = new Date();
  64. let year = today.getFullYear();
  65. let mon = today.getMonth();
  66. let day = today.getDate();
  67. let hour = 0; //today.getHours();
  68. let min = 0; //today.getMinutes();
  69. let sec = 0; //today.getSeconds();
  70.  
  71.  
  72. //日付のパース
  73. dsrc = dsrc.match(/\d+/g);
  74. if (dsrc)
  75. {
  76. if (dsrc.length == 1)
  77. {
  78. day = dsrc.shift();
  79. }
  80. else if (dsrc.length == 2)
  81. {
  82. mon = dsrc.shift() - 1;
  83. day = dsrc.shift();
  84. }
  85. else if (dsrc.length >= 3)
  86. {
  87. let yer = dsrc.shift();
  88. mon = dsrc.shift() - 1;
  89. day = dsrc.shift();
  90.  
  91. if (yer.toString().length >= 4)
  92. {
  93. year = yer;
  94. }
  95. else
  96. {
  97. if (yer > 70) year -= 100;
  98. year = year.toString().substring(0, 4 - (yer.toString().length)) + yer;
  99. }
  100. }
  101. }
  102.  
  103. //時間をパース
  104. tsrc = tsrc.match(/\d+/g);
  105. if (tsrc)
  106. {
  107. if (tsrc.length == 1)
  108. {
  109. hour = tsrc.shift();
  110. }
  111. else if (tsrc.length == 2)
  112. {
  113. hour = tsrc.shift();
  114. min = tsrc.shift();
  115. }
  116. else if (tsrc.length >= 3)
  117. {
  118. hour = tsrc.shift();
  119. min = tsrc.shift();
  120. sec = tsrc.shift();
  121. }
  122. }
  123.  
  124. if (!dsrc && !tsrc) return null;
  125.  
  126. return new Date(year, mon, day, hour, min, sec);
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement