dt_param.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. // TDC is to get DateTime format info for current locale
  2. function TDC() {
  3. var d=new Date(1970,0,0,0,0,0,0),d2=new Date(d),s1,s2,api=-1;
  4. d.setHours(10); d2.setHours(11);
  5. s1=d.toLocaleString(); s2=d2.toLocaleString();
  6. this.displayHour=(s1!=s2);
  7. d.setHours(0); d2.setHours(0);
  8. d.setMinutes(10); d2.setMinutes(11);
  9. this.displayMinute=(d.toLocaleString()!=d2.toLocaleString());
  10. d.setMinutes(0); d2.setMinutes(0);
  11. d.setSeconds(10); d2.setSeconds(11);
  12. this.displaySecond=(d.toLocaleString()!=d2.toLocaleString());
  13. d.setSeconds(0); d2.setSeconds(0);
  14. if (this.displayHour) {
  15. for (i=0; i<((s1.length<s2.length)?s1.length:s2.length); i++) {
  16. if (s1.charAt(i)!=s2.charAt(i)) {
  17. api=i-1; break;
  18. }
  19. }
  20. d.setHours(11); d2.setHours(23);
  21. s1=d.toLocaleString(); s2=d2.toLocaleString();
  22. this.twelveHourClock=(s1.substring(api,api+2)==s2.substring(api,api+2));
  23. this.displayAMPM=(s1!=s2);
  24. d.setHours(0); d2.setHours(0);
  25. d.setHours(9); d2.setHours(11);
  26. this.hourLeadZero=(d.toLocaleString().length==d2.toLocaleString().length);
  27. d.setHours(0); d2.setHours(0);
  28. } else {
  29. this.twelveHourClock=false;
  30. this.displayAMPM=false;
  31. this.hourLeadZero=false;
  32. }
  33. if (this.displayMinute) {
  34. d.setMinutes(9); d2.setMinutes(11);
  35. this.minuteLeadZero=(d.toLocaleString().length==d2.toLocaleString().length);
  36. d.setMinutes(0); d2.setMinutes(0);
  37. } else
  38. this.minuteLeadZero=false;
  39. if (this.displaySecond) {
  40. d.setSeconds(9); d2.setSeconds(11);
  41. this.secondLeadZero=(d.toLocaleString().length==d2.toLocaleString().length);
  42. d.setSeconds(0); d2.setSeconds(0);
  43. } else
  44. this.secondLeadZero=false;
  45. }
  46. var TD = new TDC();
  47. // create time editables, hour dropdown, minute dropdown, second dropdown, and am/pm dropdown
  48. function CreateTimeEditables(paramName, postFix, enabled, cssClass, style, hour, minute, second)
  49. {
  50. var properties = "";
  51. if (!enabled)
  52. {
  53. properties += " disabled='disabled' ";
  54. }
  55. if (cssClass.length != 0)
  56. {
  57. properties += " class='";
  58. properties += cssClass;
  59. properties += "' ";
  60. }
  61. if (style.length != 0)
  62. {
  63. properties += " style='";
  64. properties += style;
  65. properties += "' ";
  66. }
  67. var time_sep_span = "";
  68. time_sep_span += "<span ";
  69. time_sep_span += properties;
  70. time_sep_span += ">";
  71. time_sep_span += L_TIME_SEPARATOR;
  72. time_sep_span += "</span>";
  73. // There is no way to set the width of select boxes except by manipulating the text tags associated with <option>s.
  74. // You can add a margin by beginning and ending your option's text with a &nbsp;.
  75. var editablesHtml = "";
  76. if (TD.displayHour)
  77. {
  78. editablesHtml += "<SELECT ";
  79. editablesHtml += properties;
  80. editablesHtml += " name='";
  81. editablesHtml += paramName;
  82. editablesHtml += postFix;
  83. editablesHtml += "Hour'>";
  84. var minHour;
  85. var maxHour;
  86. if (TD.twelveHourClock)
  87. {
  88. minHour = 1;
  89. maxHour = 12;
  90. }
  91. else
  92. {
  93. minHour = 0;
  94. maxHour = 23;
  95. }
  96. for (i = minHour; i <= maxHour ; i++){
  97. editablesHtml += " <option value='";
  98. editablesHtml += i;
  99. editablesHtml += "'";
  100. if (!TD.twelveHourClock)
  101. {
  102. if (i == hour)
  103. editablesHtml += " selected ";
  104. }
  105. else
  106. {
  107. if (( hour == 0) && (i == 12))
  108. editablesHtml += " selected ";
  109. else if ((hour == 12) && (i == 12))
  110. editablesHtml += " selected ";
  111. else if ((hour > 12) && (i == hour - 12))
  112. editablesHtml += " selected ";
  113. else if (i == hour)
  114. editablesHtml += " selected ";
  115. }
  116. if ((i < 10) && (TD.hourLeadZero))
  117. {
  118. editablesHtml += "> 0";
  119. }
  120. else
  121. {
  122. editablesHtml += "> ";
  123. }
  124. editablesHtml += i;
  125. editablesHtml += "&nbsp;";
  126. editablesHtml += "</option>\n";
  127. }
  128. editablesHtml += " </SELECT>";
  129. }
  130. if (TD.displayMinute)
  131. {
  132. if (editablesHtml.length != 0)
  133. {
  134. editablesHtml += time_sep_span;
  135. }
  136. editablesHtml += "<SELECT ";
  137. editablesHtml += properties;
  138. editablesHtml += " name='";
  139. editablesHtml += paramName;
  140. editablesHtml += postFix;
  141. editablesHtml += "Minute'>";
  142. for (i = 0; i <= 59; i++){
  143. editablesHtml += " <option value='";
  144. editablesHtml += i;
  145. editablesHtml += "'";
  146. if (i == minute)
  147. editablesHtml += " selected ";
  148. if ((i < 10) && (TD.minuteLeadZero))
  149. {
  150. editablesHtml += "> 0";
  151. }
  152. else
  153. {
  154. editablesHtml += "> ";
  155. }
  156. editablesHtml += i;
  157. editablesHtml += "&nbsp;";
  158. editablesHtml += "</option>\n";
  159. }
  160. editablesHtml += " </SELECT>";
  161. }
  162. if (TD.displaySecond)
  163. {
  164. if (editablesHtml.length != 0)
  165. editablesHtml += time_sep_span;
  166. editablesHtml += "<SELECT ";
  167. editablesHtml += properties;
  168. editablesHtml += " name='";
  169. editablesHtml += paramName;
  170. editablesHtml += postFix;
  171. editablesHtml += "Second'>";
  172. for (i = 0; i <= 59; i++){
  173. editablesHtml += " <option value='";
  174. editablesHtml += i;
  175. editablesHtml += "'";
  176. if (i == second)
  177. editablesHtml += " selected ";
  178. if ((i < 10) && (TD.secondLeadZero))
  179. editablesHtml += "> 0";
  180. else
  181. editablesHtml += "> ";;
  182. editablesHtml += i;
  183. editablesHtml += "&nbsp;";
  184. editablesHtml += "</option>\n";
  185. }
  186. editablesHtml += " </SELECT>";
  187. }
  188. if (TD.twelveHourClock)
  189. {
  190. editablesHtml += "<SELECT ";
  191. editablesHtml += properties;
  192. editablesHtml += " name='";
  193. editablesHtml += paramName;
  194. editablesHtml += postFix;
  195. editablesHtml += "AMPM' >";
  196. editablesHtml += " <option value='0'";
  197. if (hour < 12)
  198. editablesHtml += " selected ";
  199. editablesHtml += "> ";
  200. editablesHtml += L_AM_DESIGNATOR;
  201. editablesHtml += "</option>\n";
  202. editablesHtml += " <option value='1'";
  203. if (hour >= 12)
  204. editablesHtml += " selected ";
  205. editablesHtml += "> ";
  206. editablesHtml += L_PM_DESIGNATOR;
  207. editablesHtml += "</option>\n";
  208. editablesHtml += " </SELECT>";
  209. }
  210. return editablesHtml;
  211. }
  212. // get Locale Date/Time
  213. // d: input Date
  214. // return only Date part if includeDate==true, and includeTime== false
  215. // return only Time part if includeDate==false and includeTime== true
  216. // return datetime string if includeDate==true and includeTime == true
  217. function GLDT(d, includeDate, includeTime) { // Get Locale Date/Time
  218. // Returns date/and or time from locale string.
  219. // Assumes that date appears before time in string.
  220. if (includeDate && includeTime) return d.toLocaleString();
  221. var d2 = new Date(d);
  222. var ds;
  223. var ds2;
  224. var ml;
  225. d2.setMilliseconds(d.getMilliseconds()<=887 ? d.getMilliseconds()+111 : d.getMilliseconds() - 111);
  226. d2.setSeconds(d.getSeconds()<=49 ? d.getSeconds()+11 : d.getSeconds()-11);
  227. d2.setMinutes(d.getMinutes()<=49 ? d.getMinutes()+11 : d.getMinutes()-11);
  228. // although TD.twelveHourClock could be true, but d.getHours will always get hours in 24
  229. // only the localized the date string will be in twelve hour clock
  230. // here we want d2's hour's first digit different from d1's hour's first digit
  231. // also if d1 is morning, d2 will be in afternoon, vice versa thus we get different strings for AM, and PM
  232. // because AM/PM could be before hours (eg. in Korean)
  233. if (TD.twelveHourClock)
  234. {
  235. var hour = d.getHours();
  236. if (hour == 0 || hour == 1 || hour == 10 || hour == 11)
  237. {
  238. d2.setHours(14);
  239. }
  240. else if (hour == 12 || hour == 13 || hour == 22 || hour == 23)
  241. {
  242. d2.setHours(2);
  243. }
  244. else if (hour < 12)
  245. {
  246. d2.setHours(13);
  247. }
  248. else
  249. {
  250. d2.setHours(1);
  251. }
  252. }
  253. else
  254. {
  255. d2.setHours( d.getHours()<12 ? (d.getHours() == 1 ? 2 : d.getHours() + 12) : (d.getHours()<20 ? 20 : 11));
  256. }
  257. ds = d.toLocaleString();
  258. ds2 = d2.toLocaleString();
  259. ml = ds.length < ds2.length ? ds.length : ds2.length ;
  260. for (i=0; i<ml; i++) {
  261. if (ds.charAt(i) != ds2.charAt(i))
  262. {
  263. // put the iterator back to the beginning of the word
  264. while (ds.charAt(i) != ' ') i--;
  265. i++;
  266. break;
  267. }
  268. }
  269. if (includeDate)
  270. return ds.substring(0, i-1);
  271. else if (includeTime)
  272. return ds.substring(i);
  273. else
  274. return "";
  275. }
  276. // construct localized datetime/date/time string
  277. // from DateTime(year, month, day, hour, minute, second)
  278. // or Date(year, month, day)
  279. // or Time(hour, minute, second)
  280. function NeutralDT2D(s) {
  281. var d="";
  282. var td = new Date();
  283. var a;
  284. if (s.indexOf("DateTime")!=-1) {
  285. a = s.replace("DateTime","").replace("(","").replace(")","").split(",") ;
  286. d = GLDT(new Date(a[0], a[1]-1, a[2], a[3], a[4], a[5], 0), true, true);
  287. } else if (s.indexOf("Date")!=-1) {
  288. a = s.replace("Date","").replace("(","").replace(")","").split(",") ;
  289. d = GLDT(new Date(a[0], a[1]-1, a[2], 0, 0, 0, 0), true, false);
  290. } else if (s.indexOf("Time")!=-1) {
  291. a = s.replace("Time","").replace("(","").replace(")","").split(",");
  292. d = GLDT(new Date(td.getYear(), td.getMonth(), td.getDate(), a[0], a[1], a[2]), false, true);
  293. }
  294. return d;
  295. }
  296. function NeutralDT2Date(s){
  297. var d="";
  298. var td = new Date();
  299. var a;
  300. if (s.indexOf("DateTime")!=-1) {
  301. a = s.replace("DateTime","").replace("(","").replace(")","").split(",") ;
  302. return new Date(a[0], a[1]-1, a[2], a[3], a[4], a[5], 0);
  303. } else if (s.indexOf("Date")!=-1) {
  304. a = s.replace("Date","").replace("(","").replace(")","").split(",") ;
  305. return new Date(a[0], a[1]-1, a[2], 0, 0, 0, 0);
  306. } else if (s.indexOf("Time")!=-1) {
  307. a = s.replace("Time","").replace("(","").replace(")","").split(",");
  308. return new Date(td.getYear(), td.getMonth(), td.getDate(), a[0], a[1], a[2]);
  309. }
  310. return d;
  311. }