TimeHelper.js 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. /*
  2. *+------------------------------------------------------------------------+
  3. *| Licensed Materials - Property of IBM
  4. *| BI and PM: prmt
  5. *| (C) Copyright IBM Corp. 2002, 2013
  6. *|
  7. *| US Government Users Restricted Rights - Use, duplication or
  8. *| disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  9. *|
  10. *+------------------------------------------------------------------------+
  11. */
  12. /*
  13. PRMT_TimeHelper.js
  14. This script is used to provide helper functions for the selectTime prompt control
  15. */
  16. //Constructor to create a TimeHelper object is empty
  17. function PRMT_TimeHelper(bRequired) {
  18. //specify whether the user must enter a date or not
  19. this.m_bRequired = bRequired;
  20. }
  21. //returns a locale formatted time for a given date
  22. //
  23. // iDisplay: determine the display
  24. // 0 = h:m:s:ms
  25. // 1 = h:m:s
  26. // 2 = h:m
  27. PRMT_TimeHelper.prototype.getTimeFormatForDisplay = function(dTime, iDisplay)
  28. {
  29. var sValue = K_PRMT_sEMPTY;
  30. if(dTime){
  31. //format hours
  32. var iHours = dTime.getHours();
  33. if (g_24HourClock == 'false'){
  34. if (iHours == 0){
  35. iHours = 12;
  36. } else if (iHours > 12) {
  37. iHours = iHours - 12;
  38. }
  39. }
  40. var sHours = iHours.toString();
  41. if ((sHours.length == 1) && (g_hourFormatMedium == 'hh')) {
  42. sHours = '0' + sHours;
  43. }
  44. sValue += sHours;
  45. //format minutes
  46. var sMinutes = dTime.getMinutes().toString();
  47. if ((sMinutes.length == 1) && (g_minuteFormatMedium == 'mm')) {
  48. sMinutes = '0' + sMinutes;
  49. }
  50. sValue += g_timeSeparator + sMinutes;
  51. //format seconds
  52. if (iDisplay <= 1) {
  53. var sSeconds = dTime.getSeconds().toString();
  54. if ((sSeconds.length == 1) && (g_secondFormatMedium == 'ss')) {
  55. sSeconds = '0' + sSeconds;
  56. }
  57. sValue += g_timeSeparator + sSeconds;
  58. }
  59. //format milliseconds
  60. if (iDisplay == 0) {
  61. var sMilliseconds = dTime.getMilliseconds().toString();
  62. if (sMilliseconds.length == 2) {
  63. sMilliseconds = '0' + sMilliseconds;
  64. } else if (sMilliseconds.length == 1) {
  65. sMilliseconds = '00' + sMilliseconds;
  66. }
  67. sValue += K_PRMT_sDOT + sMilliseconds;
  68. }
  69. if ((g_24HourClock == 'false') && (g_AMPMLocation == 'right')) {
  70. if (dTime.getHours() >= 12) {
  71. sValue = sValue + K_PRMT_sSP + g_pmString;
  72. } else {
  73. sValue = sValue + K_PRMT_sSP + g_amString;
  74. }
  75. } else if ((g_24HourClock == "false") && (g_AMPMLocation == "left")) {
  76. if (dTime.getHours() >= 12) {
  77. sValue = g_pmString + K_PRMT_sSP + sValue;
  78. }else{
  79. sValue = g_amString + K_PRMT_sSP + sValue;
  80. }
  81. }
  82. }
  83. return sValue;
  84. };
  85. PRMT_TimeHelper.prototype.getTimeFormatForInput = function (dTime, iDisplay) {
  86. var v_sDisplay = K_PRMT_sEMPTY;
  87. if(dTime) {
  88. var sHours = this.getTimePartWithZeroPadding(dTime.getHours().toString(), 2);
  89. var sMinutes = this.getTimePartWithZeroPadding(dTime.getMinutes().toString(), 2);
  90. v_sDisplay = sHours + K_PRMT_sCOLON + sMinutes;
  91. if(iDisplay < 2){
  92. var sSeconds = this.getTimePartWithZeroPadding(dTime.getSeconds().toString(), 2);
  93. v_sDisplay += K_PRMT_sCOLON + sSeconds;
  94. if(iDisplay < 1){
  95. var sMilliseconds = this.getTimePartWithZeroPadding(dTime.getMilliseconds().toString(), 3);
  96. v_sDisplay += K_PRMT_sDOT + sMilliseconds;
  97. }
  98. }
  99. }
  100. return v_sDisplay;
  101. };
  102. //process the input and convert into the proper format
  103. PRMT_TimeHelper.prototype.getTimeFormatForSubmit = function (dTime)
  104. {
  105. var v_sValue = K_PRMT_sEMPTY;
  106. if(dTime) {
  107. //return a valid time data type
  108. //00:00:00.000
  109. var sHours = this.getTimePartWithZeroPadding(dTime.getHours().toString(), 2);
  110. var sMinutes = this.getTimePartWithZeroPadding(dTime.getMinutes().toString(), 2);
  111. var sSeconds = this.getTimePartWithZeroPadding(dTime.getSeconds().toString(), 2);
  112. var sMilliseconds = this.getTimePartWithZeroPadding(dTime.getMilliseconds().toString(), 3);
  113. v_sValue = sHours + K_PRMT_sCOLON + sMinutes + K_PRMT_sCOLON + sSeconds + K_PRMT_sDOT + sMilliseconds;
  114. }
  115. return v_sValue;
  116. };
  117. PRMT_TimeHelper.prototype.getTimePartWithZeroPadding = function (sTimePart, iLength){
  118. var v_sPaddedValue = sTimePart;
  119. while(v_sPaddedValue.length < iLength){
  120. v_sPaddedValue = '0' + v_sPaddedValue;
  121. }
  122. return v_sPaddedValue;
  123. };
  124. PRMT_TimeHelper.prototype.getTimeValuesArray = function (sTimeString) {
  125. var v_aSplit = sTimeString.split(":");
  126. var v_aTimeValues = new Array();
  127. v_aTimeValues[0] = v_aSplit[0];
  128. v_aTimeValues[1] = v_aSplit[1];
  129. if(v_aSplit.length > 2){
  130. var v_aSplitSecs = v_aSplit[2].split(".");
  131. v_aTimeValues[2] = v_aSplitSecs[0];
  132. if(v_aSplitSecs.length > 1){
  133. v_aTimeValues[3] = v_aSplit[2].split(".")[1];
  134. }
  135. }
  136. return v_aTimeValues;
  137. };
  138. //returns a date object for a given time
  139. PRMT_TimeHelper.prototype.dParseTime = function (sTime)
  140. {
  141. var dTime = (sTime) ? new Date(1970,0,1,0,0,0,0) : null;
  142. //set a default time if a default has been specified
  143. var sDefaultTime = (sTime) ? sTime : K_PRMT_sEMPTY;
  144. //convert from a valid date time format (XSD format and SQL)
  145. var arDateTime = sDefaultTime.split(/[T\s]/g);
  146. if (arDateTime.length == 2){
  147. sDefaultTime = arDateTime[1];
  148. }
  149. var arDefaultTime = sDefaultTime.split(/[:\.\,]/g);
  150. //do we have a valid date?
  151. if ((arDefaultTime.length >= 2)) {
  152. var sHours = parseInt(arDefaultTime[0],10);
  153. if (sHours != NaN && sHours <= 23 && sHours >= 0) {
  154. dTime.setHours(sHours);
  155. } else {
  156. // going to default to 12
  157. dTime.setHours(0);
  158. }
  159. var sMinutes = parseInt(arDefaultTime[1],10);
  160. if (sMinutes != NaN && sMinutes <= 59 && sMinutes >= 0) {
  161. dTime.setMinutes(sMinutes);
  162. } else {
  163. // going to default to 0 minutes
  164. dTime.setMinutes(0);
  165. }
  166. if (arDefaultTime.length >= 3 )
  167. {
  168. var sSeconds = parseInt(arDefaultTime[2],10);
  169. if (sSeconds != NaN && sSeconds <= 59 && sSeconds >= 0) {
  170. dTime.setSeconds(sSeconds);
  171. } else {
  172. // going to default to 0 seconds
  173. dTime.setSeconds(0);
  174. }
  175. }
  176. //milliseconds are optional
  177. if (arDefaultTime.length == 4) {
  178. var sMilliseconds = parseInt(arDefaultTime[3],10);
  179. if (sMilliseconds != NaN && sMilliseconds <= 999 && sMilliseconds >= 0) {
  180. dTime.setMilliseconds(sMilliseconds);
  181. } else {
  182. // going to default to 0 milliseconds
  183. dTime.setMilliseconds(0);
  184. }
  185. }
  186. }
  187. return dTime;
  188. };
  189. PRMT_TimeHelper.prototype.bCheckTime = function ( sTimeValue, iDisplay )
  190. {
  191. var v_bValid = true;
  192. var v_sValue = this.sStripNonAlphanumerics(sTimeValue).f_trim();
  193. if( this.m_bRequired || (v_sValue !== K_PRMT_sEMPTY) ){
  194. if(v_sValue === K_PRMT_sEMPTY){
  195. v_bValid = false;
  196. } else {
  197. var v_aTimeValues = this.getTimeValuesArray(v_sValue);
  198. var hours = v_aTimeValues[0];
  199. var minutes = v_aTimeValues[1];
  200. var seconds = v_aTimeValues[2];
  201. var milliseconds = v_aTimeValues[3];
  202. //check time parts
  203. if ( !this.bisValidHours(hours) ||
  204. !this.bisValidMinutes(minutes) ||
  205. ( iDisplay <= 1 && !this.bisValidSeconds(seconds) ) ||
  206. ( iDisplay == 0 && !this.bisValidMilliseconds(milliseconds) ) ) {
  207. v_bValid = false;
  208. }
  209. }
  210. }
  211. return v_bValid;
  212. };
  213. PRMT_TimeHelper.prototype.bisValidHours = function (hours) {
  214. var iHours = parseInt(hours,10);
  215. return (bNumbersOnly(hours) && iHours >= MIN_HOURS && iHours <= MAX_HOURS);
  216. };
  217. PRMT_TimeHelper.prototype.bisValidMinutes = function (min) {
  218. var iMinutes = parseInt(min,10);
  219. return ( bNumbersOnly(min) && iMinutes >= MIN_MINUTES && iMinutes <= MAX_MINUTES );
  220. };
  221. PRMT_TimeHelper.prototype.bisValidSeconds = function (sec) {
  222. var iSeconds = parseInt(sec,10);
  223. return ( bNumbersOnly(sec) && iSeconds >= MIN_SECONDS && iSeconds <= MAX_SECONDS );
  224. };
  225. PRMT_TimeHelper.prototype.bisValidMilliseconds = function (msec) {
  226. var iMilliseconds = parseInt(msec,10);
  227. return ( bNumbersOnly(msec) && iMilliseconds >= MIN_MILLISECONDS && iMilliseconds <= MAX_MILLISECONDS );
  228. };
  229. PRMT_TimeHelper.prototype.sStripNonAlphanumerics = function (sString)
  230. {
  231. var charDelimiters = /[\s,-]/g;
  232. var arTestDateStrip = sString.split(charDelimiters);
  233. var sTestDateStrip = arTestDateStrip.join(K_PRMT_sSP);
  234. return sTestDateStrip;
  235. };
  236. /* Messages */
  237. // declare message strings
  238. var g_amString = "AM";
  239. var g_pmString = "PM";
  240. var g_mediumFormat = "MMM d, yyyy h:mm:ss a";
  241. var g_shortFormat = "M/d/yy h:mm a";
  242. var g_hourFormatMedium = "h";
  243. var g_minuteFormatMedium = "mm";
  244. var g_secondFormatMedium = "ss";
  245. var g_hourFormatShort = "h";
  246. var g_minuteFormatShort = "mm";
  247. var g_secondFormatShort = K_PRMT_sEMPTY;
  248. var g_timeSeparator = K_PRMT_sCOLON;
  249. var g_AMPMLocation = "right";
  250. var g_24HourClock = "false";
  251. /* Constants */
  252. var MAX_HOURS = 23;
  253. var MAX_MINUTES = 59;
  254. var MAX_SECONDS = 59;
  255. var MAX_MILLISECONDS = 999;
  256. var MIN_HOURS = 0;
  257. var MIN_MINUTES = 0;
  258. var MIN_SECONDS = 0;
  259. var MIN_MILLISECONDS = 0;