spreadsheet
typeScript/javascript spreadsheet parser, with formulas.
git clone https://git.vogt.world/spreadsheet.git
Log | Files | README.md
← All files
name: tests/Utilities/TypeConverterTest.ts
-rw-r--r--
63683
  1/// <reference path="../../node_modules/moment/moment.d.ts"/>
  2import * as moment from "moment";
  3import {
  4  assertEquals,
  5  test,
  6  catchAndAssertEquals, lockDate
  7} from "../Utils/Asserts";
  8import {
  9  TypeConverter
 10} from "../../src/Utilities/TypeConverter";
 11import {
 12  VALUE_ERROR,
 13  REF_ERROR, ValueError
 14} from "../../src/Errors";
 15import {
 16  Cell
 17} from "../../src/Cell";
 18
 19let ERROR_CELL = new Cell("A1");
 20ERROR_CELL.setError(new ValueError("Whooops!"));
 21
 22
 23test("TypeConverter.unitsToTimeNumber", function () {
 24  assertEquals(TypeConverter.unitsToTimeNumber(10, 10, 10), 0.4237268518518518);
 25  assertEquals(TypeConverter.unitsToTimeNumber(34, 10, 10), 0.4237268518518518);
 26  assertEquals(TypeConverter.unitsToTimeNumber(0, 0, 0), 0);
 27  assertEquals(TypeConverter.unitsToTimeNumber(24, 0, 0), 0);
 28  assertEquals(TypeConverter.unitsToTimeNumber(23, 60, 0), 0);
 29  assertEquals(TypeConverter.unitsToTimeNumber(23, 59, 60), 0);
 30});
 31
 32
 33test("TypeConverter.numberToMoment", function () {
 34  assertEquals(TypeConverter.numberToMoment(10).format("M/D/YYYY"), "1/9/1900");
 35  assertEquals(TypeConverter.numberToMoment(2).format("M/D/YYYY"), "1/1/1900");
 36  assertEquals(TypeConverter.numberToMoment(1).format("M/D/YYYY"), "12/31/1899");
 37  assertEquals(TypeConverter.numberToMoment(0).format("M/D/YYYY"), "12/30/1899");
 38  assertEquals(TypeConverter.numberToMoment(10000).format("M/D/YYYY"), "5/18/1927");
 39  assertEquals(TypeConverter.numberToMoment(10001).format("M/D/YYYY"), "5/19/1927");
 40  assertEquals(TypeConverter.numberToMoment(-1000).format("M/D/YYYY"), "4/4/1897");
 41  assertEquals(TypeConverter.numberToMoment(10.1).format("M/D/YYYY"), "1/9/1900");
 42  assertEquals(TypeConverter.numberToMoment(2.44).format("M/D/YYYY"), "1/1/1900");
 43  assertEquals(TypeConverter.numberToMoment(1.44).format("M/D/YYYY"), "12/31/1899");
 44  assertEquals(TypeConverter.numberToMoment(1.99).format("M/D/YYYY"), "1/1/1900");
 45  assertEquals(TypeConverter.numberToMoment(0.78).format("M/D/YYYY"), "12/31/1899");
 46});
 47
 48
 49test("TypeConverter.momentToDayNumber", function () {
 50  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1900-01-09")), 10);
 51  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1900-01-01")), 2);
 52  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1899-12-31")), 1);
 53  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1899-12-30")), 0);
 54  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1927-05-18")), 10000);
 55  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1927-05-19")), 10001);
 56  assertEquals(TypeConverter.momentToDayNumber(moment.utc("1897-04-04")), -1000);
 57});
 58
 59
 60test("TypeConverter.momentToNumber", function () {
 61  assertEquals(TypeConverter.momentToNumber(moment.utc("1900-01-09")), 10);
 62  assertEquals(TypeConverter.momentToNumber(moment.utc("1900-01-01")), 2);
 63  assertEquals(TypeConverter.momentToNumber(moment.utc("1899-12-31")), 1);
 64  assertEquals(TypeConverter.momentToNumber(moment.utc("1899-12-30")), 0);
 65  assertEquals(TypeConverter.momentToNumber(moment.utc("1927-05-18")), 10000);
 66  assertEquals(TypeConverter.momentToNumber(moment.utc("1927-05-19")), 10001);
 67  assertEquals(TypeConverter.momentToNumber(moment.utc("1897-04-04")), -1000);
 68  assertEquals(TypeConverter.momentToNumber(moment.utc("1900-01-09T16:11:57+00:00")), 10.674965277777778);
 69  assertEquals(TypeConverter.momentToNumber(moment.utc("1900-01-01T16:11:57+00:00")), 2.674965277777778);
 70  assertEquals(TypeConverter.momentToNumber(moment.utc("1899-12-31T12:00:00+00:00")), 1.5);
 71  assertEquals(TypeConverter.momentToNumber(moment.utc("1899-12-31T18:00:00+00:00")), 1.75);
 72});
 73
 74
 75test("TypeConverter.valueToDateNumber", function () {
 76  assertEquals(TypeConverter.valueToDateNumber(Cell.BuildFrom("A1", 10)), 10);
 77  assertEquals(TypeConverter.valueToDateNumber(10), 10);
 78  assertEquals(TypeConverter.valueToDateNumber("10"), 10);
 79  assertEquals(TypeConverter.valueToDateNumber("10.0"), 10);
 80  assertEquals(TypeConverter.valueToDateNumber("1992-1-1"), 33604);
 81  assertEquals(TypeConverter.valueToDateNumber("1992-1-2"), 33605);
 82  assertEquals(TypeConverter.valueToDateNumber(false, true), 0);
 83  assertEquals(TypeConverter.valueToDateNumber(true, true), 1);
 84  catchAndAssertEquals(function () {
 85    TypeConverter.valueToDateNumber(false); // Do not convert boolean
 86  }, VALUE_ERROR);
 87  catchAndAssertEquals(function () {
 88    TypeConverter.valueToDateNumber(ERROR_CELL);
 89  }, VALUE_ERROR);
 90  catchAndAssertEquals(function () {
 91    console.log(TypeConverter.valueToDateNumber("str"));
 92  }, VALUE_ERROR);
 93});
 94
 95
 96test("TypeConverter.firstValueAsDateNumber", function () {
 97  assertEquals(TypeConverter.firstValueAsDateNumber([Cell.BuildFrom("A1", 10)]), 10);
 98  assertEquals(TypeConverter.firstValueAsDateNumber([10]), 10);
 99  assertEquals(TypeConverter.firstValueAsDateNumber([[10]]), 10);
100  assertEquals(TypeConverter.firstValueAsDateNumber([[[[[10]]]]]), 10);
101  assertEquals(TypeConverter.firstValueAsDateNumber(["10"]), 10);
102  assertEquals(TypeConverter.firstValueAsDateNumber(["10.0"]), 10);
103  assertEquals(TypeConverter.firstValueAsDateNumber(["1992-1-1"]), 33604);
104  assertEquals(TypeConverter.firstValueAsDateNumber(["1992-1-2"]), 33605);
105  assertEquals(TypeConverter.firstValueAsDateNumber([false], true), 0);
106  assertEquals(TypeConverter.firstValueAsDateNumber([true], true), 1);
107  catchAndAssertEquals(function () {
108    TypeConverter.firstValueAsDateNumber([ERROR_CELL]);
109  }, VALUE_ERROR);
110  catchAndAssertEquals(function () {
111    TypeConverter.firstValueAsDateNumber([false]); // Do not convert boolean
112  }, VALUE_ERROR);
113  catchAndAssertEquals(function () {
114    TypeConverter.firstValueAsDateNumber(["str"]);
115  }, VALUE_ERROR);
116  catchAndAssertEquals(function () {
117    TypeConverter.firstValueAsDateNumber([[], 10]);
118  }, REF_ERROR);
119});
120
121
122test("TypeConverter.firstValue", function () {
123  assertEquals(TypeConverter.firstValue([10, 0]), 10);
124  assertEquals(TypeConverter.firstValue([[[[10]]], 0]), 10);
125  assertEquals(TypeConverter.firstValue(["10"]), "10");
126  assertEquals(TypeConverter.firstValue(["string", 22]), "string");
127  catchAndAssertEquals(function () {
128    TypeConverter.firstValue([[], 10]);
129  }, REF_ERROR);
130});
131
132
133test("TypeConverter.valueToTimestampNumber", function () {
134  assertEquals(TypeConverter.valueToTimestampNumber(Cell.BuildFrom("A1", 10)), 10);
135  assertEquals(TypeConverter.valueToTimestampNumber(10), 10);
136  assertEquals(TypeConverter.valueToTimestampNumber(""), 0);
137  assertEquals(TypeConverter.valueToTimestampNumber("12:00pm"), 0.5);
138  assertEquals(TypeConverter.valueToTimestampNumber("12:00"), 0.5);
139  assertEquals(TypeConverter.valueToTimestampNumber("12pm"), 0.5);
140  assertEquals(TypeConverter.valueToTimestampNumber("10:10am"), 0.4236111111111111);
141  assertEquals(TypeConverter.valueToTimestampNumber("10:10:10am"), 0.4237268518518518);
142  assertEquals(TypeConverter.valueToTimestampNumber("22:10:10"), 0.9237268518518519);
143  assertEquals(TypeConverter.valueToTimestampNumber("1:10:10"), 0.048726851851851855);
144  assertEquals(TypeConverter.valueToTimestampNumber("25:10:10"), 0.048726851851851855);
145  assertEquals(TypeConverter.valueToTimestampNumber(false), 0);
146  assertEquals(TypeConverter.valueToTimestampNumber(true), 0);
147  catchAndAssertEquals(function () {
148    TypeConverter.valueToTimestampNumber("str");
149  }, VALUE_ERROR);
150  catchAndAssertEquals(function () {
151    TypeConverter.valueToTimestampNumber(ERROR_CELL);
152  }, VALUE_ERROR);
153});
154
155
156test("TypeConverter.valueToString", function () {
157  assertEquals(TypeConverter.valueToString(Cell.BuildFrom("A1", 10)), "10");
158  assertEquals(TypeConverter.valueToString(new Cell("A1")), "");
159  assertEquals(TypeConverter.valueToString(10), "10");
160  assertEquals(TypeConverter.valueToString("10"), "10");
161  assertEquals(TypeConverter.valueToString("This is a string"), "This is a string");
162  assertEquals(TypeConverter.valueToString(10.3712638712), "10.3712638712");
163  assertEquals(TypeConverter.valueToString(-0.33824284782334), "-0.33824284782334");
164  assertEquals(TypeConverter.valueToString(false), "FALSE");
165  assertEquals(TypeConverter.valueToString(true), "TRUE");
166  catchAndAssertEquals(function () {
167    TypeConverter.valueToString(ERROR_CELL);
168  }, VALUE_ERROR);
169});
170
171
172test("TypeConverter.valueToBoolean", function () {
173  assertEquals(TypeConverter.valueToBoolean(Cell.BuildFrom("A1", 10)), true);
174  assertEquals(TypeConverter.valueToBoolean(Cell.BuildFrom("A1", 0)), false);
175  assertEquals(TypeConverter.valueToBoolean(new Cell("A1")), false);
176  assertEquals(TypeConverter.valueToBoolean(10), true);
177  assertEquals(TypeConverter.valueToBoolean(-10), true);
178  assertEquals(TypeConverter.valueToBoolean(1.11111), true);
179  assertEquals(TypeConverter.valueToBoolean(0), false);
180  assertEquals(TypeConverter.valueToBoolean(false), false);
181  assertEquals(TypeConverter.valueToBoolean(true), true);
182  catchAndAssertEquals(function () {
183    TypeConverter.valueToBoolean("str");
184  }, VALUE_ERROR);
185  catchAndAssertEquals(function () {
186    TypeConverter.valueToBoolean(ERROR_CELL);
187  }, VALUE_ERROR);
188});
189
190
191test("TypeConverter.valueToNumber", function () {
192  assertEquals(TypeConverter.valueToNumber(Cell.BuildFrom("A1", 10)), 10);
193  assertEquals(TypeConverter.valueToNumber(Cell.BuildFrom("A1", "10")), 10);
194  assertEquals(TypeConverter.valueToNumber(10), 10);
195  assertEquals(TypeConverter.valueToNumber(-10), -10);
196  assertEquals(TypeConverter.valueToNumber(1.11111), 1.11111);
197  assertEquals(TypeConverter.valueToNumber(0), 0);
198  assertEquals(TypeConverter.valueToNumber(false), 0);
199  assertEquals(TypeConverter.valueToNumber(true), 1);
200  assertEquals(TypeConverter.valueToNumber("10"), 10);
201  assertEquals(TypeConverter.valueToNumber("-10"), -10);
202  assertEquals(TypeConverter.valueToNumber("1.4832749823"), 1.4832749823);
203  assertEquals(TypeConverter.valueToNumber("   1.4832749823   "), 1.4832749823);
204  assertEquals(TypeConverter.valueToNumber("$10"), 10);
205  assertEquals(TypeConverter.valueToNumber("$10.217983172"), 10.217983172);
206  assertEquals(TypeConverter.valueToNumber("-$10.217983172"), -10.217983172);
207  catchAndAssertEquals(function () {
208    TypeConverter.valueToNumber("str");
209  }, VALUE_ERROR);
210  catchAndAssertEquals(function () {
211    TypeConverter.valueToNumber(ERROR_CELL);
212  }, VALUE_ERROR);
213});
214
215
216test("TypeConverter.stringToNumber", function () {
217  assertEquals(TypeConverter.stringToNumber("10"), 10);
218  assertEquals(TypeConverter.stringToNumber("-10"), -10);
219  assertEquals(TypeConverter.stringToNumber("1.4832749823"), 1.4832749823);
220  assertEquals(TypeConverter.stringToNumber("   1.4832749823   "), 1.4832749823);
221  assertEquals(TypeConverter.stringToNumber("$10"), 10);
222  assertEquals(TypeConverter.stringToNumber("$10.217983172"), 10.217983172);
223  assertEquals(TypeConverter.stringToNumber("-$10.217983172"), -10.217983172);
224  assertEquals(TypeConverter.stringToNumber("100"), 100);
225  assertEquals(TypeConverter.stringToNumber("10%"), 0.1);
226  assertEquals(TypeConverter.stringToNumber("33.213131"), 33.213131);
227  assertEquals(TypeConverter.stringToNumber("41.1231"), 41.1231);
228  assertEquals(TypeConverter.stringToNumber("10e1"), 100);
229  assertEquals(TypeConverter.stringToNumber("10e2"), 1000);
230  assertEquals(TypeConverter.stringToNumber("10E1"), 100);
231  assertEquals(TypeConverter.stringToNumber("10.44E1"), 104.4);
232  assertEquals(TypeConverter.stringToNumber("10.44E10"), 104400000000);
233  assertEquals(TypeConverter.stringToNumber("10e-1"), 1);
234  assertEquals(TypeConverter.stringToNumber("10e+1"), 100);
235  assertEquals(TypeConverter.stringToNumber("10E-1"), 1);
236  assertEquals(TypeConverter.stringToNumber("10E+1"), 100);
237  assertEquals(TypeConverter.stringToNumber("$10"), 10);
238  assertEquals(TypeConverter.stringToNumber("$0.1"), 0.1);
239  assertEquals(TypeConverter.stringToNumber("$10.1"), 10.1);
240  assertEquals(TypeConverter.stringToNumber("$9.2222"), 9.2222);
241  assertEquals(TypeConverter.stringToNumber("+$9.2345"), 9.2345);
242  assertEquals(TypeConverter.stringToNumber("+$  9.29"), 9.29);
243  assertEquals(TypeConverter.stringToNumber("+$ 9.29"), 9.29);
244  assertEquals(TypeConverter.stringToNumber("+$9.2345"), 9.2345);
245  assertEquals(TypeConverter.stringToNumber("+$  9.29"), 9.29);
246  assertEquals(TypeConverter.stringToNumber("+$ 9.29"), 9.29);
247  assertEquals(TypeConverter.stringToNumber("$.1"), 0.1);
248  assertEquals(TypeConverter.stringToNumber("+$.111"), 0.111);
249  assertEquals(TypeConverter.stringToNumber("$+.111"), 0.111);
250  assertEquals(TypeConverter.stringToNumber("-$.1"), -0.1);
251  assertEquals(TypeConverter.stringToNumber("$-9.2345"), -9.2345);
252  assertEquals(TypeConverter.stringToNumber("$ - 9.29"), -9.29);
253  assertEquals(TypeConverter.stringToNumber("$- 9.29"), -9.29);
254  assertEquals(TypeConverter.stringToNumber("-$9.2345"), -9.2345);
255  assertEquals(TypeConverter.stringToNumber("-$  9.29"), -9.29);
256  assertEquals(TypeConverter.stringToNumber("-$ 9.29"), -9.29);
257  assertEquals(TypeConverter.stringToNumber("-$9"), -9);
258  assertEquals(TypeConverter.stringToNumber("+$9"), 9);
259  assertEquals(TypeConverter.stringToNumber("$-9"), -9);
260  assertEquals(TypeConverter.stringToNumber("$+9"), 9);
261  assertEquals(TypeConverter.stringToNumber("-$9."), -9);
262  assertEquals(TypeConverter.stringToNumber("+$9."), 9);
263  assertEquals(TypeConverter.stringToNumber("$-9."), -9);
264  assertEquals(TypeConverter.stringToNumber("$+9."), 9);
265  assertEquals(TypeConverter.stringToNumber("1,000"), 1000);
266  assertEquals(TypeConverter.stringToNumber("1,000,000"), 1000000);
267  assertEquals(TypeConverter.stringToNumber("1000,000"), 1000000);
268  assertEquals(TypeConverter.stringToNumber("2222,000,000"), 2222000000);
269  assertEquals(TypeConverter.stringToNumber("1,000.1"), 1000.1);
270  assertEquals(TypeConverter.stringToNumber("1,000,000.11"), 1000000.11);
271  assertEquals(TypeConverter.stringToNumber("2222,000,000.1"), 2222000000.1);
272  assertEquals(TypeConverter.stringToNumber(" $ 1,000"), 1000);
273  assertEquals(TypeConverter.stringToNumber("$ 1,000"), 1000);
274  assertEquals(TypeConverter.stringToNumber("100.1e2"), 10010);
275  assertEquals(TypeConverter.stringToNumber("10e2%"), 10);
276  assertEquals(TypeConverter.stringToNumber("$ 1,000."), 1000);
277  assertEquals(TypeConverter.stringToNumber("$10e1"), undefined);
278  assertEquals(TypeConverter.stringToNumber("$+-10.00"), undefined);
279  assertEquals(TypeConverter.stringToNumber("+$+10.00"), undefined);
280  assertEquals(TypeConverter.stringToNumber("+$-10.00"), undefined);
281  assertEquals(TypeConverter.stringToNumber("10e"), undefined);
282  assertEquals(TypeConverter.stringToNumber("10,00"), undefined);
283  assertEquals(TypeConverter.stringToNumber("10,000,"), undefined);
284});
285
286
287test("TypeConverter.valueToNumberGracefully", function () {
288  assertEquals(TypeConverter.valueToNumberGracefully(Cell.BuildFrom("A1", "10")), 10);
289  assertEquals(TypeConverter.valueToNumberGracefully(Cell.BuildFrom("A1", "not-graceful")), 0);
290  assertEquals(TypeConverter.valueToNumberGracefully(new Cell("A1")), 0);
291  assertEquals(TypeConverter.valueToNumberGracefully(10), 10);
292  assertEquals(TypeConverter.valueToNumberGracefully(-10), -10);
293  assertEquals(TypeConverter.valueToNumberGracefully(1.11111), 1.11111);
294  assertEquals(TypeConverter.valueToNumberGracefully(0), 0);
295  assertEquals(TypeConverter.valueToNumberGracefully(false), 0);
296  assertEquals(TypeConverter.valueToNumberGracefully(true), 1);
297  assertEquals(TypeConverter.valueToNumberGracefully("10"), 10);
298  assertEquals(TypeConverter.valueToNumberGracefully("-10"), -10);
299  assertEquals(TypeConverter.valueToNumberGracefully("1.4832749823"), 1.4832749823);
300  assertEquals(TypeConverter.valueToNumberGracefully("   1.4832749823   "), 1.4832749823);
301  assertEquals(TypeConverter.valueToNumberGracefully("$10"), 10);
302  assertEquals(TypeConverter.valueToNumberGracefully("$10.217983172"), 10.217983172);
303  assertEquals(TypeConverter.valueToNumberGracefully("-$10.217983172"), -10.217983172);
304  assertEquals(TypeConverter.valueToNumberGracefully("dkasjdkljasjdas"), 0);
305});
306
307
308test("TypeConverter.stringToDateNumber", function () {
309  // MONTHDIG_DAY_YEAR, MM(fd)DD(fd)YYYY ===============================================================================
310  assertEquals(TypeConverter.stringToDateNumber("6/24/92"), 33779);
311  assertEquals(TypeConverter.stringToDateNumber("6/24/1992"), 33779);
312  assertEquals(TypeConverter.stringToDateNumber("06/24/1992"), 33779);
313  assertEquals(TypeConverter.stringToDateNumber("1/01/1999"), 36161);
314  assertEquals(TypeConverter.stringToDateNumber("1/01/99"), 36161);
315  assertEquals(TypeConverter.stringToDateNumber("1/01/2222"), 117610);
316  assertEquals(TypeConverter.stringToDateNumber("9/02/1902"), 976);
317  assertEquals(TypeConverter.stringToDateNumber("9/2/1902"), 976);
318  assertEquals(TypeConverter.stringToDateNumber("11/3/4243"), 856071);
319  assertEquals(TypeConverter.stringToDateNumber("  04/19/1992  "), 33713);
320  assertEquals(TypeConverter.stringToDateNumber("5/20/1992"), 33744);
321  assertEquals(TypeConverter.stringToDateNumber("6/21/1992"), 33776);
322  assertEquals(TypeConverter.stringToDateNumber("9/29/1992"), 33876);
323  assertEquals(TypeConverter.stringToDateNumber("1/24/1992"), 33627);
324  assertEquals(TypeConverter.stringToDateNumber("12/21/1992"), 33959);
325  assertEquals(TypeConverter.stringToDateNumber("01/31/1992"), 33634);
326  assertEquals(TypeConverter.stringToDateNumber("1/13/1992"), 33616);
327  assertEquals(TypeConverter.stringToDateNumber("2/29/2004"), 38046);
328  assertEquals(TypeConverter.stringToDateNumber("2/28/2004"), 38045);
329  assertEquals(TypeConverter.stringToDateNumber("2/28/004"), 38045);
330  assertEquals(TypeConverter.stringToDateNumber("2/28/04"), 38045);
331  assertEquals(TypeConverter.stringToDateNumber("2/28/4"), 38045);
332  assertEquals(TypeConverter.stringToDateNumber("1/13/1999"), 36173);
333  assertEquals(TypeConverter.stringToDateNumber("01/13/1999"), 36173);
334  assertEquals(TypeConverter.stringToDateNumber("01/13/0999"), -329069);
335  assertEquals(TypeConverter.stringToDateNumber("01/13/1200"), -255656);
336  assertEquals(TypeConverter.stringToDateNumber("01/13/0029"), 47131);
337  assertEquals(TypeConverter.stringToDateNumber("01/13/0030"), 10971);
338  assertEquals(TypeConverter.stringToDateNumber("01/13/0044"), 16084);
339  assertEquals(TypeConverter.stringToDateNumber("01/13/0050"), 18276);
340  assertEquals(TypeConverter.stringToDateNumber("01/13/0097"), 35443);
341  assertEquals(TypeConverter.stringToDateNumber("01/13/0099"), 36173);
342  assertEquals(TypeConverter.stringToDateNumber("01/13/0000"), 36538);
343  assertEquals(TypeConverter.stringToDateNumber("01/13/0101"), -657057);
344  assertEquals(TypeConverter.stringToDateNumber("01/13/0100"), -657422);
345  assertEquals(TypeConverter.stringToDateNumber("12/31/100"), -657070);
346  assertEquals(TypeConverter.stringToDateNumber("11/10/122"), -649086);
347  assertEquals(TypeConverter.stringToDateNumber("1/22/2222"), 117631);
348  assertEquals(TypeConverter.stringToDateNumber("1/22/222"), -612854);
349  // delimiter tests
350  assertEquals(TypeConverter.stringToDateNumber("6-24-92"), 33779);
351  assertEquals(TypeConverter.stringToDateNumber("6/24/92"), 33779);
352  assertEquals(TypeConverter.stringToDateNumber("6 24 92"), 33779);
353  assertEquals(TypeConverter.stringToDateNumber("6.24.92"), 33779);
354  assertEquals(TypeConverter.stringToDateNumber("6 . 24 . 92"), 33779);
355  assertEquals(TypeConverter.stringToDateNumber("6 / 24 / 92"), 33779);
356  assertEquals(TypeConverter.stringToDateNumber("6, 24, 92"), 33779);
357  // flex delimiter should not allow a comma without a space after it.
358  catchAndAssertEquals(function() {
359    TypeConverter.stringToDateNumber("Sunday,6/24/92");
360  }, VALUE_ERROR);
361  // Leap day on non-leap years
362  catchAndAssertEquals(function() {
363    TypeConverter.stringToDateNumber("2/29/2005");
364  }, VALUE_ERROR);
365  catchAndAssertEquals(function() {
366    TypeConverter.stringToDateNumber("2/29/2001");
367  }, VALUE_ERROR);
368  // Out of range day for any month
369  catchAndAssertEquals(function() {
370    TypeConverter.stringToDateNumber("1/44/2005");
371  }, VALUE_ERROR);
372  // timestamp test
373  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10am"), 33779);
374  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10:10"), 33779);
375  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10:10am"), 33779);
376  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10:10:10"), 33779);
377  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10:10:10am"), 33779);
378  assertEquals(TypeConverter.stringToDateNumber("6-24-92  10  am"), 33779);
379  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10: 10 "), 33779);
380  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10: 10 pm"), 33779);
381  assertEquals(TypeConverter.stringToDateNumber("6-24-92 10: 10: 10"), 33779);
382  assertEquals(TypeConverter.stringToDateNumber("6-24-92  10: 10: 10    am  "), 33779);
383  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 00:00"), 33779);
384  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 0:00"), 33779);
385  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 10:10"), 33779);
386  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 16:22"), 33779);
387  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 25:10"), 33780);
388  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 23:60"), 33780);
389  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 24:00"), 33780);
390  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 23:59"), 33779);
391  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 10:11111111"), 43889);
392  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 25000:22"), 37214);
393  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 25000:    22"), 37214);
394  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 00:00am"), 33779);
395  assertEquals(TypeConverter.stringToDateNumber("1992/06/24 01:44am "), 33779);
396  assertEquals(TypeConverter.stringToDateNumber("1999/1/01 02:59pm"), 36161);
397  assertEquals(TypeConverter.stringToDateNumber("2222/1/01 03:33pm"), 117610);
398  assertEquals(TypeConverter.stringToDateNumber("1902/9/02 12:33pm"), 976);
399  assertEquals(TypeConverter.stringToDateNumber("1902/9/2 12:33pm"), 976);
400  assertEquals(TypeConverter.stringToDateNumber("4243/11/3 12:33pm"), 856071);
401  assertEquals(TypeConverter.stringToDateNumber("  1992/04/19   12:  33pm   "), 33713);
402  assertEquals(TypeConverter.stringToDateNumber("1992/5/20 01:33am"), 33744);
403  assertEquals(TypeConverter.stringToDateNumber("1992/6/21  3:33pm"), 33776);
404  assertEquals(TypeConverter.stringToDateNumber("1992/9/29 3:33pm"), 33876);
405  assertEquals(TypeConverter.stringToDateNumber("1992/1/24 3:33pm"), 33627);
406  assertEquals(TypeConverter.stringToDateNumber("1992/12/21 3:33pm"), 33959);
407  assertEquals(TypeConverter.stringToDateNumber("1992/01/31 3:33pm"), 33634);
408  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 3:33pm"), 33616);
409  assertEquals(TypeConverter.stringToDateNumber("2004/2/29 3:33pm"), 38046);
410  assertEquals(TypeConverter.stringToDateNumber("2004/2/28  3:33pm "), 38045);
411  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 3:33pm"), 36173);
412  assertEquals(TypeConverter.stringToDateNumber("1999/01/13 3:33pm"), 36173);
413  assertEquals(TypeConverter.stringToDateNumber("0999/01/13 3:33pm"), -329069);
414  assertEquals(TypeConverter.stringToDateNumber("1200/01/13 3:33pm"), -255656);
415  assertEquals(TypeConverter.stringToDateNumber("0029/01/13 3:33pm"), 47131);
416  assertEquals(TypeConverter.stringToDateNumber("0030/01/13 3:33pm"), 10971);
417  assertEquals(TypeConverter.stringToDateNumber("0044/01/13 3:33pm"), 16084);
418  assertEquals(TypeConverter.stringToDateNumber("0050/01/13 3:33pm"), 18276);
419  assertEquals(TypeConverter.stringToDateNumber("0097/01/13 00:33pm"), 35443);
420  assertEquals(TypeConverter.stringToDateNumber("0099/01/13 3:33pm"), 36173);
421  assertEquals(TypeConverter.stringToDateNumber("0000/01/13 3:33pm"), 36538);
422  assertEquals(TypeConverter.stringToDateNumber("0101/01/13 3:33pm"), -657057);
423  assertEquals(TypeConverter.stringToDateNumber("0100/01/13 3:33pm"), -657422);
424  assertEquals(TypeConverter.stringToDateNumber("100/12/31 3:33pm"), -657070);
425  assertEquals(TypeConverter.stringToDateNumber("122/11/10 3:33pm"), -649086);
426  assertEquals(TypeConverter.stringToDateNumber("2222/1/22 3:33pm"), 117631);
427  assertEquals(TypeConverter.stringToDateNumber("222/1/22 3:33pm"), -612854);
428  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 6:22222222am"), 49048); // overload minutes
429  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:720pm"), 33617); // overload minutes
430  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:720pm"), 33617); // overload minutes
431  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:719pm"), 33616); // overload minutes
432  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:720am"), 33616); // overload minutes
433  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:01pm"), 33616); // overload minutes
434  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66669pm"), 33662); // overload minutes
435  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66669am"), 33662); // overload minutes
436  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66249pm"), 33662); // overload minutes
437  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66249am"), 33662); // overload minutes
438  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:666669am"), 34078); // overload minutes
439  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:666669pm"), 34079); // overload minutes
440  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:100000000am"), 103060); // overload minutes
441  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:0912347287am"), 667190); // overload minutes
442  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:00000912347287am"), 667190); // overload minutes
443  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:1989198298am"), 1415003); // overload minutes
444  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 0:0:0"), 33779);
445  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 0000:0000:0000"), 33779);
446  assertEquals(TypeConverter.stringToDateNumber("0000/01/13 3:33:999999999"), 48112); // overload seconds
447  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 6:22222222:0"), 49048); // overload minutes
448  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:912347287:10"), 667191); // overload minutes
449  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:100000000:10"), 103060); // overload minutes
450  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 23:720:10"), 33617); // overload minutes
451  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 23:719:60"), 33617); // overload minutes, seconds
452  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 24:00:00"), 33780); // overload hours
453  assertEquals(TypeConverter.stringToDateNumber("1999/1/01 200000000:999999999:923231312"), 9074624); // overload hours, minutes, seconds
454  assertEquals(TypeConverter.stringToDateNumber("  1992/04/19   12:  33: 11  "), 33713);
455  assertEquals(TypeConverter.stringToDateNumber("0000/01/13 3:33:33"), 36538);
456  assertEquals(TypeConverter.stringToDateNumber("4243/11/3 200000000:33:444"), 9189404);
457  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 10:10:10pm"), 36173);
458  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 0:0:0pm"), 33779);
459  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 00:0000:0000pm"), 33779);
460  assertEquals(TypeConverter.stringToDateNumber("0000/01/13 3:33:999999999pm"), 48112); // overload seconds
461  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 6:22222222:0pm"), 49048); // overload minutes
462  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:912347287:10pm"), 667191); // overload minutes
463  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:100000000:10pm"), 103060); // overload minutes
464  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 00:00:00am"), 33779);
465  assertEquals(TypeConverter.stringToDateNumber("1992/06/24 01:44:00am "), 33779);
466  assertEquals(TypeConverter.stringToDateNumber("1999/1/01 02:59:00pm"), 36161);
467  assertEquals(TypeConverter.stringToDateNumber("2222/1/01 03:33:00pm"), 117610);
468  assertEquals(TypeConverter.stringToDateNumber("1902/9/02 12:33:00pm"), 976);
469  assertEquals(TypeConverter.stringToDateNumber("1902/9/2 12:33:00pm"), 976);
470  assertEquals(TypeConverter.stringToDateNumber("4243/11/3 12:33:00pm"), 856071);
471  assertEquals(TypeConverter.stringToDateNumber("  1992/04/19   12:  33:  00  pm   "), 33713);
472  assertEquals(TypeConverter.stringToDateNumber("1992/5/20 01:33:44am"), 33744);
473  assertEquals(TypeConverter.stringToDateNumber("1992/6/21  3:33:44pm"), 33776);
474  assertEquals(TypeConverter.stringToDateNumber("1992/9/29 3:33:44pm"), 33876);
475  assertEquals(TypeConverter.stringToDateNumber("1992/1/24 3:33:44pm"), 33627);
476  assertEquals(TypeConverter.stringToDateNumber("1992/12/21 3:33:44pm"), 33959);
477  assertEquals(TypeConverter.stringToDateNumber("1992/01/31 3:33:44pm"), 33634);
478  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 3:33:44pm"), 33616);
479  assertEquals(TypeConverter.stringToDateNumber("2004/2/29 3:33:44pm"), 38046);
480  assertEquals(TypeConverter.stringToDateNumber("2004/2/28  3:33:44pm "), 38045);
481  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 3:33:44pm"), 36173);
482  assertEquals(TypeConverter.stringToDateNumber("1999/01/13 3:33:44pm"), 36173);
483  assertEquals(TypeConverter.stringToDateNumber("0999/01/13 3:33:44pm"), -329069);
484  assertEquals(TypeConverter.stringToDateNumber("1200/01/13 3:33:44pm"), -255656);
485  assertEquals(TypeConverter.stringToDateNumber("0029/01/13 3:33:44pm"), 47131);
486  assertEquals(TypeConverter.stringToDateNumber("0030/01/13 3:33:44pm"), 10971);
487  assertEquals(TypeConverter.stringToDateNumber("0044/01/13 3:33:44pm"), 16084);
488  assertEquals(TypeConverter.stringToDateNumber("0050/01/13 3:33:44pm"), 18276);
489  assertEquals(TypeConverter.stringToDateNumber("0097/01/13 00:33:44pm"), 35443);
490  assertEquals(TypeConverter.stringToDateNumber("0099/01/13 3:33:44pm"), 36173);
491  assertEquals(TypeConverter.stringToDateNumber("0000/01/13 3:33:44pm"), 36538);
492  assertEquals(TypeConverter.stringToDateNumber("0101/01/13 3:33:44pm"), -657057);
493  assertEquals(TypeConverter.stringToDateNumber("0100/01/13 3:33:44pm"), -657422);
494  assertEquals(TypeConverter.stringToDateNumber("100/12/31 3:33:44pm"), -657070);
495  assertEquals(TypeConverter.stringToDateNumber("122/11/10 3:33:44pm"), -649086);
496  assertEquals(TypeConverter.stringToDateNumber("2222/1/22 3:33:44pm"), 117631);
497  assertEquals(TypeConverter.stringToDateNumber("222/1/22 3:33:44pm"), -612854);
498  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 6:22222222:44am"), 49048); // overload minutes
499  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:720:00pm"), 33617); // overload minutes
500  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:720:00pm"), 33617); // overload minutes
501  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:719:00pm"), 33616); // overload minutes
502  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:720:00am"), 33616); // overload minutes
503  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:719:60pm"), 33617); // overload minutes
504  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:720:00am"), 33616); // overload minutes
505  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 00:01:00pm"), 33616); // overload minutes
506  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66669:00pm"), 33662); // overload minutes
507  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66669:00am"), 33662); // overload minutes
508  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66249:00pm"), 33662); // overload minutes
509  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:66249:00am"), 33662); // overload minutes
510  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:666669:00am"), 34078); // overload minutes
511  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:666669:00pm"), 34079); // overload minutes
512  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:100000000:00am"), 103060); // overload minutes
513  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:912347287:00am"), 667190); // overload minutes
514  // YEAR_MONTHDIG_DAY, YYYY(fd)MM(fd)DD ===============================================================================
515  assertEquals(TypeConverter.stringToDateNumber("1992/6/24"), 33779);
516  assertEquals(TypeConverter.stringToDateNumber("1992/06/24"), 33779);
517  assertEquals(TypeConverter.stringToDateNumber("1999/1/01"), 36161);
518  assertEquals(TypeConverter.stringToDateNumber("2222/1/01"), 117610);
519  assertEquals(TypeConverter.stringToDateNumber("1902/9/02"), 976);
520  assertEquals(TypeConverter.stringToDateNumber("1902/9/2"), 976);
521  assertEquals(TypeConverter.stringToDateNumber("4243/11/3"), 856071);
522  assertEquals(TypeConverter.stringToDateNumber("  1992/04/19  "), 33713);
523  assertEquals(TypeConverter.stringToDateNumber("  1992 /  04/ 19  "), 33713);
524  assertEquals(TypeConverter.stringToDateNumber("1992/5/20"), 33744);
525  assertEquals(TypeConverter.stringToDateNumber("1992/6/21"), 33776);
526  assertEquals(TypeConverter.stringToDateNumber("1992/9/29"), 33876);
527  assertEquals(TypeConverter.stringToDateNumber("1992/1/24"), 33627);
528  assertEquals(TypeConverter.stringToDateNumber("1992/12/21"), 33959);
529  assertEquals(TypeConverter.stringToDateNumber("1992/01/31"), 33634);
530  assertEquals(TypeConverter.stringToDateNumber("1992/1/13"), 33616);
531  assertEquals(TypeConverter.stringToDateNumber("2004/2/29"), 38046);
532  assertEquals(TypeConverter.stringToDateNumber("2004/2/28"), 38045);
533  assertEquals(TypeConverter.stringToDateNumber("1999/1/13"), 36173);
534  assertEquals(TypeConverter.stringToDateNumber("1999/01/13"), 36173);
535  assertEquals(TypeConverter.stringToDateNumber("0999/01/13"), -329069);
536  assertEquals(TypeConverter.stringToDateNumber("1200/01/13"), -255656);
537  assertEquals(TypeConverter.stringToDateNumber("0029/01/13"), 47131);
538  assertEquals(TypeConverter.stringToDateNumber("0030/01/13"), 10971);
539  assertEquals(TypeConverter.stringToDateNumber("0044/01/13"), 16084);
540  assertEquals(TypeConverter.stringToDateNumber("0050/01/13"), 18276);
541  assertEquals(TypeConverter.stringToDateNumber("0097/01/13"), 35443);
542  assertEquals(TypeConverter.stringToDateNumber("0099/01/13"), 36173);
543  assertEquals(TypeConverter.stringToDateNumber("0000/01/13"), 36538);
544  assertEquals(TypeConverter.stringToDateNumber("0101/01/13"), -657057);
545  assertEquals(TypeConverter.stringToDateNumber("0100/01/13"), -657422);
546  assertEquals(TypeConverter.stringToDateNumber("100/12/31"), -657070);
547  assertEquals(TypeConverter.stringToDateNumber("122/11/10"), -649086);
548  assertEquals(TypeConverter.stringToDateNumber("2222/1/22"), 117631);
549  assertEquals(TypeConverter.stringToDateNumber("222/1/22"), -612854);
550  assertEquals(TypeConverter.stringToDateNumber("Sunday 1992/6/24"), 33779);
551  assertEquals(TypeConverter.stringToDateNumber("Monday 1992/6/24"), 33779);
552  assertEquals(TypeConverter.stringToDateNumber("Tuesday 1992/6/24"), 33779);
553  assertEquals(TypeConverter.stringToDateNumber("Wednesday 1992/6/24"), 33779);
554  assertEquals(TypeConverter.stringToDateNumber("Thursday 1992/6/24"), 33779);
555  assertEquals(TypeConverter.stringToDateNumber("Friday 1992/6/24"), 33779);
556  assertEquals(TypeConverter.stringToDateNumber("Saturday 1992/6/24"), 33779);
557  assertEquals(TypeConverter.stringToDateNumber("Sun 1992/6/24"), 33779);
558  assertEquals(TypeConverter.stringToDateNumber("Mon 1992/6/24"), 33779);
559  assertEquals(TypeConverter.stringToDateNumber("Tue 1992/6/24"), 33779);
560  assertEquals(TypeConverter.stringToDateNumber("Wed 1992/6/24"), 33779);
561  assertEquals(TypeConverter.stringToDateNumber("Thu 1992/6/24"), 33779);
562  assertEquals(TypeConverter.stringToDateNumber("Fri 1992/6/24"), 33779);
563  assertEquals(TypeConverter.stringToDateNumber("Sat 1992/6/24"), 33779);
564  assertEquals(TypeConverter.stringToDateNumber("Sunday, 1992/6/24"), 33779);
565  // delimiter tests
566  assertEquals(TypeConverter.stringToDateNumber("1992-6-24"), 33779);
567  assertEquals(TypeConverter.stringToDateNumber("1992/6/24"), 33779);
568  assertEquals(TypeConverter.stringToDateNumber("1992 6 24"), 33779);
569  assertEquals(TypeConverter.stringToDateNumber("1992 6 24"), 33779);
570  assertEquals(TypeConverter.stringToDateNumber("1992 . 6 . 24"), 33779);
571  assertEquals(TypeConverter.stringToDateNumber("1992 / 6 / 24"), 33779);
572  assertEquals(TypeConverter.stringToDateNumber("1992, 6, 24"), 33779);
573  // flex delimiter should not allow a comma without a space after it.
574  catchAndAssertEquals(function() {
575    TypeConverter.stringToDateNumber("Sunday,1992/6/24");
576  }, VALUE_ERROR);
577  // Leap day on non-leap years
578  catchAndAssertEquals(function() {
579    TypeConverter.stringToDateNumber("2005/2/29");
580  }, VALUE_ERROR);
581  catchAndAssertEquals(function() {
582    TypeConverter.stringToDateNumber("2001/2/29");
583  }, VALUE_ERROR);
584  // Out of range day for any month
585  catchAndAssertEquals(function() {
586    TypeConverter.stringToDateNumber("2005/1/44");
587  }, VALUE_ERROR);
588  // timestamp test
589  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10am"), 33779);
590  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10:10"), 33779);
591  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10:10am"), 33779);
592  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10:10:10"), 33779);
593  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10:10:10am"), 33779);
594  assertEquals(TypeConverter.stringToDateNumber("1992-6-24  10  am"), 33779);
595  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10: 10 "), 33779);
596  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10: 10 pm"), 33779);
597  assertEquals(TypeConverter.stringToDateNumber("1992-6-24 10: 10: 10"), 33779);
598  assertEquals(TypeConverter.stringToDateNumber("1992-6-24  10: 10: 10    am   "), 33779);
599  assertEquals(TypeConverter.stringToDateNumber("1992/6/24 00am"), 33779);
600  assertEquals(TypeConverter.stringToDateNumber("1992/06/24 01am "), 33779);
601  assertEquals(TypeConverter.stringToDateNumber("1999/1/01 02pm"), 36161);
602  assertEquals(TypeConverter.stringToDateNumber("2222/1/01 03pm"), 117610);
603  assertEquals(TypeConverter.stringToDateNumber("1902/9/02 12pm"), 976);
604  assertEquals(TypeConverter.stringToDateNumber("1902/9/2 12pm"), 976);
605  assertEquals(TypeConverter.stringToDateNumber("4243/11/3 12pm   "), 856071);
606  assertEquals(TypeConverter.stringToDateNumber("  1992/04/19   12pm   "), 33713);
607  assertEquals(TypeConverter.stringToDateNumber("1992/5/20 01am"), 33744);
608  assertEquals(TypeConverter.stringToDateNumber("1992/6/21  3pm"), 33776);
609  assertEquals(TypeConverter.stringToDateNumber("1992/9/29 3pm"), 33876);
610  assertEquals(TypeConverter.stringToDateNumber("1992/1/24 3pm"), 33627);
611  assertEquals(TypeConverter.stringToDateNumber("1992/12/21 3pm"), 33959);
612  assertEquals(TypeConverter.stringToDateNumber("1992/01/31 3pm"), 33634);
613  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 3pm"), 33616);
614  assertEquals(TypeConverter.stringToDateNumber("2004/2/29 3pm"), 38046);
615  assertEquals(TypeConverter.stringToDateNumber("2004/2/28  3pm "), 38045);
616  assertEquals(TypeConverter.stringToDateNumber("1999/1/13 3pm"), 36173);
617  assertEquals(TypeConverter.stringToDateNumber("1999/01/13 3pm"), 36173);
618  assertEquals(TypeConverter.stringToDateNumber("0999/01/13 3pm"), -329069);
619  assertEquals(TypeConverter.stringToDateNumber("1200/01/13 3pm"), -255656);
620  assertEquals(TypeConverter.stringToDateNumber("0029/01/13 3pm"), 47131);
621  assertEquals(TypeConverter.stringToDateNumber("0030/01/13 3pm"), 10971);
622  assertEquals(TypeConverter.stringToDateNumber("0044/01/13 3pm"), 16084);
623  assertEquals(TypeConverter.stringToDateNumber("0050/01/13 3pm"), 18276);
624  assertEquals(TypeConverter.stringToDateNumber("0097/01/13 00pm"), 35443);
625  assertEquals(TypeConverter.stringToDateNumber("0099/01/13 3pm"), 36173);
626  assertEquals(TypeConverter.stringToDateNumber("0000/01/13 3pm"), 36538);
627  assertEquals(TypeConverter.stringToDateNumber("0101/01/13 3pm"), -657057);
628  assertEquals(TypeConverter.stringToDateNumber("0100/01/13 3pm"), -657422);
629  assertEquals(TypeConverter.stringToDateNumber("100/12/31 3pm"), -657070);
630  assertEquals(TypeConverter.stringToDateNumber("122/11/10 3pm"), -649086);
631  assertEquals(TypeConverter.stringToDateNumber("2222/1/22 3pm"), 117631);
632  assertEquals(TypeConverter.stringToDateNumber("222/1/22 3pm"), -612854);
633  catchAndAssertEquals(function() {
634    TypeConverter.stringToDateNumber("2005/2/29 000pm");// Too many digits
635  }, VALUE_ERROR);
636  catchAndAssertEquals(function() {
637    TypeConverter.stringToDateNumber("2001/2/2 13pm");// Hour out of range
638  }, VALUE_ERROR);
639  // DAY_MONTHNAME_YEAR, DD(fd)Month(fd)YYYY ===========================================================================
640  assertEquals(TypeConverter.stringToDateNumber("Sun 09 Feb 2017"), 42775);
641  assertEquals(TypeConverter.stringToDateNumber("Sun 9 Feb 2017"), 42775);
642  assertEquals(TypeConverter.stringToDateNumber("Mon 09 Feb 2017"), 42775);
643  assertEquals(TypeConverter.stringToDateNumber("Thursday 09 Feb 2017"), 42775);
644  assertEquals(TypeConverter.stringToDateNumber("Thursday 09 February 2017"), 42775);
645  assertEquals(TypeConverter.stringToDateNumber("Sun 01 September 20"), 44075);
646  assertEquals(TypeConverter.stringToDateNumber("Sun, 09, Feb, 2017"), 42775);
647  assertEquals(TypeConverter.stringToDateNumber("20 May 1992"), 33744);
648  assertEquals(TypeConverter.stringToDateNumber("31 December 100"), -657070);
649  assertEquals(TypeConverter.stringToDateNumber("13 January 0030"), 10971);
650  assertEquals(TypeConverter.stringToDateNumber("13 January 1200"), -255656);
651  assertEquals(TypeConverter.stringToDateNumber("22 January 2222"), 117631);
652  assertEquals(TypeConverter.stringToDateNumber("3 November 4243"), 856071);
653  assertEquals(TypeConverter.stringToDateNumber("13 November 0999"), -328765);
654  assertEquals(TypeConverter.stringToDateNumber("13 November 1200"), -255351);
655  assertEquals(TypeConverter.stringToDateNumber("13 January 0029"), 47131);
656  assertEquals(TypeConverter.stringToDateNumber("13 January 0030"), 10971);
657  assertEquals(TypeConverter.stringToDateNumber("13 January 0044"), 16084);
658  assertEquals(TypeConverter.stringToDateNumber("13 January 0050"), 18276);
659  assertEquals(TypeConverter.stringToDateNumber("13 January 0097"), 35443);
660  assertEquals(TypeConverter.stringToDateNumber("13 January 0099"), 36173);
661  assertEquals(TypeConverter.stringToDateNumber("13 January 0000"), 36538);
662  assertEquals(TypeConverter.stringToDateNumber("13 January 0101"), -657057);
663  assertEquals(TypeConverter.stringToDateNumber("13 January 0100"), -657422);
664  assertEquals(TypeConverter.stringToDateNumber("01 Jan 2017"), 42736);
665  assertEquals(TypeConverter.stringToDateNumber("01 Feb 2017"), 42767);
666  assertEquals(TypeConverter.stringToDateNumber("01 Mar 2017"), 42795);
667  assertEquals(TypeConverter.stringToDateNumber("01 Apr 2017"), 42826);
668  assertEquals(TypeConverter.stringToDateNumber("01 May 2017"), 42856);
669  assertEquals(TypeConverter.stringToDateNumber("01 Jun 2017"), 42887);
670  assertEquals(TypeConverter.stringToDateNumber("01 Jul 2017"), 42917);
671  assertEquals(TypeConverter.stringToDateNumber("01 Aug 2017"), 42948);
672  assertEquals(TypeConverter.stringToDateNumber("01 Sep 2017"), 42979);
673  assertEquals(TypeConverter.stringToDateNumber("01 Oct 2017"), 43009);
674  assertEquals(TypeConverter.stringToDateNumber("01 Nov 2017"), 43040);
675  assertEquals(TypeConverter.stringToDateNumber(" 1 Dec 2017"), 43070);
676  assertEquals(TypeConverter.stringToDateNumber("20 Jan 2015"), 42024);
677  assertEquals(TypeConverter.stringToDateNumber("20 Feb 2015"), 42055);
678  assertEquals(TypeConverter.stringToDateNumber("20 Mar 2015"), 42083);
679  assertEquals(TypeConverter.stringToDateNumber("20 Apr 2015"), 42114);
680  assertEquals(TypeConverter.stringToDateNumber("20 May 2015"), 42144);
681  assertEquals(TypeConverter.stringToDateNumber("20 Jun 2015"), 42175);
682  assertEquals(TypeConverter.stringToDateNumber("20 Jul 2015"), 42205);
683  assertEquals(TypeConverter.stringToDateNumber("20 Aug 2015"), 42236);
684  assertEquals(TypeConverter.stringToDateNumber("20 Sep 2015"), 42267);
685  assertEquals(TypeConverter.stringToDateNumber("20 Oct 2015"), 42297);
686  assertEquals(TypeConverter.stringToDateNumber("20 Nov 2015"), 42328);
687  assertEquals(TypeConverter.stringToDateNumber("20 Dec 2015"), 42358);
688  assertEquals(TypeConverter.stringToDateNumber("29 Feb 2004"), 38046); // leap year, 29th ok
689  catchAndAssertEquals(function() {
690    TypeConverter.stringToDateNumber("29 Feb 2001");// not leap year, 29th not ok
691  }, VALUE_ERROR);
692  catchAndAssertEquals(function() {
693    TypeConverter.stringToDateNumber("32 June 2001");// overload numbers not ok
694  }, VALUE_ERROR);
695  // delimiter tests
696  assertEquals(TypeConverter.stringToDateNumber("Sun, 09, Feb, 2017"), 42775);
697  assertEquals(TypeConverter.stringToDateNumber("Sun, 09/Feb/2017"), 42775);
698  assertEquals(TypeConverter.stringToDateNumber("09/Feb/2017"), 42775);
699  assertEquals(TypeConverter.stringToDateNumber("09-Feb-2017"), 42775);
700  assertEquals(TypeConverter.stringToDateNumber("09.Feb.2017"), 42775);
701  assertEquals(TypeConverter.stringToDateNumber("09 Feb/2017"), 42775);
702  assertEquals(TypeConverter.stringToDateNumber("09 . Feb . 2017"), 42775);
703  // If the delimiters don't match the first one should be a space.
704  catchAndAssertEquals(function() {
705    TypeConverter.stringToDateNumber("09.Feb/2017");
706  }, VALUE_ERROR);
707  // Comma delimiters should be followed by spaces.
708  catchAndAssertEquals(function() {
709    TypeConverter.stringToDateNumber("09,Feb,2017");
710  }, VALUE_ERROR);
711  // timestamp tests
712  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10am"), 33779);
713  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10:10"), 33779);
714  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10:10am"), 33779);
715  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10:10:10"), 33779);
716  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10:10:10am"), 33779);
717  assertEquals(TypeConverter.stringToDateNumber("24/June/1992  10  am"), 33779);
718  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10: 10 "), 33779);
719  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10: 10 pm"), 33779);
720  assertEquals(TypeConverter.stringToDateNumber("24/June/1992 10: 10: 10"), 33779);
721  assertEquals(TypeConverter.stringToDateNumber("24/June/1992  10: 10: 10    am   "), 33779);
722  // MONTHNAME_DAY_YEAR, Month(fd)DD(fd)YYYY, 'Aug 19 2020' ============================================================
723  assertEquals(TypeConverter.stringToDateNumber("Sun Feb 09 2017"), 42775);
724  assertEquals(TypeConverter.stringToDateNumber("Sun Feb 9 2017"), 42775);
725  assertEquals(TypeConverter.stringToDateNumber("Mon Feb 09 2017"), 42775);
726  assertEquals(TypeConverter.stringToDateNumber("Thursday Feb 09 2017"), 42775);
727  assertEquals(TypeConverter.stringToDateNumber("Thursday February 09 2017"), 42775);
728  assertEquals(TypeConverter.stringToDateNumber("Sun September 01 20"), 44075);
729  assertEquals(TypeConverter.stringToDateNumber("Sun, Feb, 09, 2017"), 42775);
730  assertEquals(TypeConverter.stringToDateNumber("May 20 1992"), 33744);
731  assertEquals(TypeConverter.stringToDateNumber("December 31 100"), -657070);
732  assertEquals(TypeConverter.stringToDateNumber("January 13 0030"), 10971);
733  assertEquals(TypeConverter.stringToDateNumber("January 13 1200"), -255656);
734  assertEquals(TypeConverter.stringToDateNumber("January 22 2222"), 117631);
735  assertEquals(TypeConverter.stringToDateNumber("November 3 4243"), 856071);
736  assertEquals(TypeConverter.stringToDateNumber("Feb 29 2004"), 38046); // leap year, 29th ok
737  catchAndAssertEquals(function() {
738    TypeConverter.stringToDateNumber("Feb 29 2001");// not leap year, 29th not ok
739  }, VALUE_ERROR);
740  catchAndAssertEquals(function() {
741    TypeConverter.stringToDateNumber("June 32 2001");// overload numbers not ok
742  }, VALUE_ERROR);
743  // YEAR_MONTHDIG, YYYY(fd)MM, '1992/06' ==============================================================================
744  assertEquals(TypeConverter.stringToDateNumber("2017/01"), 42736);
745  assertEquals(TypeConverter.stringToDateNumber("2017/02"), 42767);
746  assertEquals(TypeConverter.stringToDateNumber("2017/03"), 42795);
747  assertEquals(TypeConverter.stringToDateNumber("2017/04"), 42826);
748  assertEquals(TypeConverter.stringToDateNumber("2017/05"), 42856);
749  assertEquals(TypeConverter.stringToDateNumber("2017/06"), 42887);
750  assertEquals(TypeConverter.stringToDateNumber("2017/07"), 42917);
751  assertEquals(TypeConverter.stringToDateNumber("2017/08"), 42948);
752  assertEquals(TypeConverter.stringToDateNumber("2017/09"), 42979);
753  assertEquals(TypeConverter.stringToDateNumber("2017/10"), 43009);
754  assertEquals(TypeConverter.stringToDateNumber("2017/11"), 43040);
755  assertEquals(TypeConverter.stringToDateNumber("2017/12"), 43070);
756  assertEquals(TypeConverter.stringToDateNumber("2017/01"), 42736);
757  // delimiter tests
758  assertEquals(TypeConverter.stringToDateNumber("Thursday 2017/01"), 42736);
759  assertEquals(TypeConverter.stringToDateNumber("Thursday, 2017/01"), 42736);
760  assertEquals(TypeConverter.stringToDateNumber("2017/01"), 42736);
761  assertEquals(TypeConverter.stringToDateNumber("2017-01"), 42736);
762  assertEquals(TypeConverter.stringToDateNumber("2017. 01"), 42736);
763  assertEquals(TypeConverter.stringToDateNumber("2017 01"), 42736);
764  assertEquals(TypeConverter.stringToDateNumber("2017, 01"), 42736);
765  // Comma and period delimiters should be followed by spaces.
766  catchAndAssertEquals(function() {
767    TypeConverter.stringToDateNumber("2017,01");
768  }, VALUE_ERROR);
769  catchAndAssertEquals(function() {
770    TypeConverter.stringToDateNumber("2017.01");
771  }, VALUE_ERROR);
772  // timestamp test
773  assertEquals(TypeConverter.stringToDateNumber("2017-01 10am"), 42736);
774  assertEquals(TypeConverter.stringToDateNumber("2017-01 10:10"), 42736);
775  assertEquals(TypeConverter.stringToDateNumber("2017-01 10:10am"), 42736);
776  assertEquals(TypeConverter.stringToDateNumber("2017-01 10:10:10"), 42736);
777  assertEquals(TypeConverter.stringToDateNumber("2017-01 10:10:10am"), 42736);
778  assertEquals(TypeConverter.stringToDateNumber("2017-01  10  am"), 42736);
779  assertEquals(TypeConverter.stringToDateNumber("2017-01 10: 10 "), 42736);
780  assertEquals(TypeConverter.stringToDateNumber("2017-01 10: 10 pm"), 42736);
781  assertEquals(TypeConverter.stringToDateNumber("2017-01 10: 10: 10"), 42736);
782  assertEquals(TypeConverter.stringToDateNumber("2017-01  10: 10: 10    am   "), 42736);
783  // MONTHDIG_YEAR, MM(fd)YYYY, '06/1992' ================================================================================
784  assertEquals(TypeConverter.stringToDateNumber("01/2017"), 42736);
785  assertEquals(TypeConverter.stringToDateNumber("02/2017"), 42767);
786  assertEquals(TypeConverter.stringToDateNumber("03/2017"), 42795);
787  assertEquals(TypeConverter.stringToDateNumber("04/2017"), 42826);
788  assertEquals(TypeConverter.stringToDateNumber("05/2017"), 42856);
789  assertEquals(TypeConverter.stringToDateNumber("06/2017"), 42887);
790  assertEquals(TypeConverter.stringToDateNumber("07/2017"), 42917);
791  assertEquals(TypeConverter.stringToDateNumber("08/2017"), 42948);
792  assertEquals(TypeConverter.stringToDateNumber("09/2017"), 42979);
793  assertEquals(TypeConverter.stringToDateNumber("10/2017"), 43009);
794  assertEquals(TypeConverter.stringToDateNumber("11/2017"), 43040);
795  assertEquals(TypeConverter.stringToDateNumber("12/2017"), 43070);
796  // delimiter tests
797  assertEquals(TypeConverter.stringToDateNumber("Thursday 01/2017"), 42736);
798  assertEquals(TypeConverter.stringToDateNumber("Thursday, 01/2017"), 42736);
799  assertEquals(TypeConverter.stringToDateNumber("1/2017"), 42736);
800  assertEquals(TypeConverter.stringToDateNumber("01-2017"), 42736);
801  assertEquals(TypeConverter.stringToDateNumber("01. 2017"), 42736);
802  assertEquals(TypeConverter.stringToDateNumber("01, 2017"), 42736);
803  // Comma, period delimiters should be followed by spaces.
804  catchAndAssertEquals(function() {
805    TypeConverter.stringToDateNumber("01,2017");
806  }, VALUE_ERROR);
807  catchAndAssertEquals(function() {
808    TypeConverter.stringToDateNumber("01.2017");
809  }, VALUE_ERROR);
810  // 0 is not a month
811  catchAndAssertEquals(function() {
812    TypeConverter.stringToDateNumber("0/2017");
813  }, VALUE_ERROR);
814  // timestamp test
815  assertEquals(TypeConverter.stringToDateNumber("01-2017 10am"), 42736);
816  assertEquals(TypeConverter.stringToDateNumber("01-2017 10:10"), 42736);
817  assertEquals(TypeConverter.stringToDateNumber("01-2017 10:10am"), 42736);
818  assertEquals(TypeConverter.stringToDateNumber("01-2017 10:10:10"), 42736);
819  assertEquals(TypeConverter.stringToDateNumber("01-2017 10:10:10am"), 42736);
820  assertEquals(TypeConverter.stringToDateNumber("01-2017  10  am"), 42736);
821  assertEquals(TypeConverter.stringToDateNumber("01-2017 10: 10 "), 42736);
822  assertEquals(TypeConverter.stringToDateNumber("01-2017 10: 10 pm"), 42736);
823  assertEquals(TypeConverter.stringToDateNumber("01-2017 10: 10: 10"), 42736);
824  assertEquals(TypeConverter.stringToDateNumber("01-2017  10: 10: 10    am   "), 42736);
825  // YEAR_MONTHNAME, YYYY(fd)Month, '1992/Aug' =========================================================================
826  assertEquals(TypeConverter.stringToDateNumber("2017 January"), 42736);
827  assertEquals(TypeConverter.stringToDateNumber("2017 February"), 42767);
828  assertEquals(TypeConverter.stringToDateNumber("2017 March"), 42795);
829  assertEquals(TypeConverter.stringToDateNumber("2017 April"), 42826);
830  assertEquals(TypeConverter.stringToDateNumber("2017 May"), 42856);
831  assertEquals(TypeConverter.stringToDateNumber("2017 June"), 42887);
832  assertEquals(TypeConverter.stringToDateNumber("2017 July"), 42917);
833  assertEquals(TypeConverter.stringToDateNumber("2017 August"), 42948);
834  assertEquals(TypeConverter.stringToDateNumber("2017 September"), 42979);
835  assertEquals(TypeConverter.stringToDateNumber("2017 October"), 43009);
836  assertEquals(TypeConverter.stringToDateNumber("2017 November"), 43040);
837  assertEquals(TypeConverter.stringToDateNumber("2017 December"), 43070);
838  // delimiter tests
839  assertEquals(TypeConverter.stringToDateNumber("Thursday 2017 January"), 42736);
840  assertEquals(TypeConverter.stringToDateNumber("Thursday, 2017 January"), 42736);
841  assertEquals(TypeConverter.stringToDateNumber("2017/January"), 42736);
842  assertEquals(TypeConverter.stringToDateNumber("2017-January"), 42736);
843  assertEquals(TypeConverter.stringToDateNumber("2017. January"), 42736);
844  assertEquals(TypeConverter.stringToDateNumber("2017, January"), 42736);
845  // Comma delimiters should be followed by spaces.
846  catchAndAssertEquals(function() {
847    TypeConverter.stringToDateNumber("2017,January");
848  }, VALUE_ERROR);
849  catchAndAssertEquals(function() {
850    TypeConverter.stringToDateNumber("2017.January");
851  }, VALUE_ERROR);
852  // timestamp test
853  assertEquals(TypeConverter.stringToDateNumber("2017-January 10am"), 42736);
854  assertEquals(TypeConverter.stringToDateNumber("2017-January 10:10"), 42736);
855  assertEquals(TypeConverter.stringToDateNumber("2017-January 10:10am"), 42736);
856  assertEquals(TypeConverter.stringToDateNumber("2017-January 10:10:10"), 42736);
857  assertEquals(TypeConverter.stringToDateNumber("2017-January 10:10:10am"), 42736);
858  assertEquals(TypeConverter.stringToDateNumber("2017-January  10  am"), 42736);
859  assertEquals(TypeConverter.stringToDateNumber("2017-January 10: 10 "), 42736);
860  assertEquals(TypeConverter.stringToDateNumber("2017-January 10: 10 pm"), 42736);
861  assertEquals(TypeConverter.stringToDateNumber("2017-January 10: 10: 10"), 42736);
862  assertEquals(TypeConverter.stringToDateNumber("2017-January  10: 10: 10    am   "), 42736);
863  // MONTHNAME_YEAR, Month(fd)YYYY, 'Aug 1992' =========================================================================
864  assertEquals(TypeConverter.stringToDateNumber("January 2017"), 42736);
865  assertEquals(TypeConverter.stringToDateNumber("February 2017"), 42767);
866  assertEquals(TypeConverter.stringToDateNumber("March 2017"), 42795);
867  assertEquals(TypeConverter.stringToDateNumber("April 2017"), 42826);
868  assertEquals(TypeConverter.stringToDateNumber("May 2017"), 42856);
869  assertEquals(TypeConverter.stringToDateNumber("June 2017"), 42887);
870  assertEquals(TypeConverter.stringToDateNumber("July 2017"), 42917);
871  assertEquals(TypeConverter.stringToDateNumber("August 2017"), 42948);
872  assertEquals(TypeConverter.stringToDateNumber("September 2017"), 42979);
873  assertEquals(TypeConverter.stringToDateNumber("October 2017"), 43009);
874  assertEquals(TypeConverter.stringToDateNumber("November 2017"), 43040);
875  assertEquals(TypeConverter.stringToDateNumber("December 2017"), 43070);
876  assertEquals(TypeConverter.stringToDateNumber("  Feb    2017  "), 42767);
877  assertEquals(TypeConverter.stringToDateNumber("Feb-2017"), 42767);
878  assertEquals(TypeConverter.stringToDateNumber("Feb. 2017"), 42767);
879  assertEquals(TypeConverter.stringToDateNumber("Feb/2017"), 42767);
880  assertEquals(TypeConverter.stringToDateNumber("Feb    .    2017"), 42767);
881  assertEquals(TypeConverter.stringToDateNumber("Feb -      2017"), 42767);
882  assertEquals(TypeConverter.stringToDateNumber("January 0030"), 10959);
883  assertEquals(TypeConverter.stringToDateNumber("November 4243"), 856069);
884  assertEquals(TypeConverter.stringToDateNumber("December 0100"), -657100);
885  assertEquals(TypeConverter.stringToDateNumber("Jan 2017"), 42736);
886  assertEquals(TypeConverter.stringToDateNumber("Feb 2017"), 42767);
887  assertEquals(TypeConverter.stringToDateNumber("Mar 2017"), 42795);
888  assertEquals(TypeConverter.stringToDateNumber("Apr 2017"), 42826);
889  assertEquals(TypeConverter.stringToDateNumber("May 2017"), 42856);
890  assertEquals(TypeConverter.stringToDateNumber("Jun 2017"), 42887);
891  assertEquals(TypeConverter.stringToDateNumber("Jul 2017"), 42917);
892  assertEquals(TypeConverter.stringToDateNumber("Aug 2017"), 42948);
893  assertEquals(TypeConverter.stringToDateNumber("Sep 2017"), 42979);
894  assertEquals(TypeConverter.stringToDateNumber("Oct 2017"), 43009);
895  assertEquals(TypeConverter.stringToDateNumber("Nov 2017"), 43040);
896  assertEquals(TypeConverter.stringToDateNumber("Dec 2017"), 43070);
897  assertEquals(TypeConverter.stringToDateNumber("Feb, 2017"), 42767);
898  catchAndAssertEquals(function() {
899    TypeConverter.stringToDateNumber("December 100");// need 4 digits
900  }, VALUE_ERROR);
901  catchAndAssertEquals(function() {
902    TypeConverter.stringToDateNumber("Dec.20");// need space after if using period
903  }, VALUE_ERROR);
904  // delimiter tests
905  assertEquals(TypeConverter.stringToDateNumber("Thursday January 2017"), 42736);
906  assertEquals(TypeConverter.stringToDateNumber("Thursday, January 2017"), 42736);
907  assertEquals(TypeConverter.stringToDateNumber("January/2017"), 42736);
908  assertEquals(TypeConverter.stringToDateNumber("January-2017"), 42736);
909  assertEquals(TypeConverter.stringToDateNumber("January. 2017"), 42736);
910  assertEquals(TypeConverter.stringToDateNumber("January, 2017"), 42736);
911  // Comma, period delimiters should be followed by spaces.
912  catchAndAssertEquals(function() {
913    TypeConverter.stringToDateNumber("January,2017");
914  }, VALUE_ERROR);
915  catchAndAssertEquals(function() {
916    TypeConverter.stringToDateNumber("January.2017");
917  }, VALUE_ERROR);
918  // timestamp test
919  assertEquals(TypeConverter.stringToDateNumber("January-2017 10am"), 42736);
920  assertEquals(TypeConverter.stringToDateNumber("January-2017 10:10"), 42736);
921  assertEquals(TypeConverter.stringToDateNumber("January-2017 10:10am"), 42736);
922  assertEquals(TypeConverter.stringToDateNumber("January-2017 10:10:10"), 42736);
923  assertEquals(TypeConverter.stringToDateNumber("January-2017 10:10:10am"), 42736);
924  assertEquals(TypeConverter.stringToDateNumber("January-2017  10  am"), 42736);
925  assertEquals(TypeConverter.stringToDateNumber("January-2017 10: 10 "), 42736);
926  assertEquals(TypeConverter.stringToDateNumber("January-2017 10: 10 pm"), 42736);
927  assertEquals(TypeConverter.stringToDateNumber("January-2017 10: 10: 10"), 42736);
928  assertEquals(TypeConverter.stringToDateNumber("January-2017  10: 10: 10    am  "), 42736);
929  assertEquals(TypeConverter.stringToDateNumber("January-2000 100000000:100000000:100000000"), 4273794);
930  assertEquals(TypeConverter.stringToDateNumber("1999/1/01 00200000000:00000999999999:00000923231312"), 9074624);
931  assertEquals(TypeConverter.stringToDateNumber("1992/1/13 12:00001989198298am"), 1415003);
932  catchAndAssertEquals(function() {
933    TypeConverter.stringToDateNumber("1992/1/13 12:000019891982980am");
934  }, VALUE_ERROR);
935  catchAndAssertEquals(function() {
936    TypeConverter.stringToDateNumber("January-2000 100000000:100000000:1001000000");
937  }, VALUE_ERROR);
938  // MONTHDIG_DAYDIG, MM(fd)DD, '09/01' =========================================================================
939  lockDate(2017, 9, 24, 10, 55, 23);
940  assertEquals(TypeConverter.stringToDateNumber("01/09"), 42744);
941  assertEquals(TypeConverter.stringToDateNumber("02/09"), 42775);
942  assertEquals(TypeConverter.stringToDateNumber("03/09"), 42803);
943  assertEquals(TypeConverter.stringToDateNumber("04/09"), 42834);
944  assertEquals(TypeConverter.stringToDateNumber("05/09"), 42864);
945  assertEquals(TypeConverter.stringToDateNumber("06/09"), 42895);
946  assertEquals(TypeConverter.stringToDateNumber("07/09"), 42925);
947  assertEquals(TypeConverter.stringToDateNumber("08/09"), 42956);
948  assertEquals(TypeConverter.stringToDateNumber("09/09"), 42987);
949  assertEquals(TypeConverter.stringToDateNumber("10/09"), 43017);
950  assertEquals(TypeConverter.stringToDateNumber("11/09"), 43048);
951  assertEquals(TypeConverter.stringToDateNumber("12/09"), 43078);
952  assertEquals(TypeConverter.stringToDateNumber("01/01"), 42736);
953  assertEquals(TypeConverter.stringToDateNumber("01/02"), 42737);
954  assertEquals(TypeConverter.stringToDateNumber("01/03"), 42738);
955  assertEquals(TypeConverter.stringToDateNumber("01/04"), 42739);
956  assertEquals(TypeConverter.stringToDateNumber("01/05"), 42740);
957  assertEquals(TypeConverter.stringToDateNumber("01/29"), 42764);
958  assertEquals(TypeConverter.stringToDateNumber("01/30"), 42765);
959  assertEquals(TypeConverter.stringToDateNumber("01/31"), 42766);
960  assertEquals(TypeConverter.stringToDateNumber("01/09 10:10:10am"), 42744);
961  assertEquals(TypeConverter.stringToDateNumber("01/09 10:10:100000"), 42745);
962  assertEquals(TypeConverter.stringToDateNumber("08/09 10:10:100000"), 42957);
963  assertEquals(TypeConverter.stringToDateNumber("01/02 10am"), 42737);
964  assertEquals(TypeConverter.stringToDateNumber("01/02 10:10"), 42737);
965  assertEquals(TypeConverter.stringToDateNumber("01/02 10:10am"), 42737);
966  assertEquals(TypeConverter.stringToDateNumber("01/02 10:10:10"), 42737);
967  assertEquals(TypeConverter.stringToDateNumber("01/02 10:10:10am"), 42737);
968  assertEquals(TypeConverter.stringToDateNumber("01/02   10  am"), 42737);
969  assertEquals(TypeConverter.stringToDateNumber("01/02  10: 10: 10    am  "), 42737);
970});
971
972
973test("TypeConverter.stringToTimeNumber", function () {
974  assertEquals(TypeConverter.stringToTimeNumber("12:00pm"), 0.5);
975  assertEquals(TypeConverter.stringToTimeNumber("12:00"), 0.5);
976  assertEquals(TypeConverter.stringToTimeNumber("12pm"), 0.5);
977  assertEquals(TypeConverter.stringToTimeNumber("10:10am"), 0.4236111111111111);
978  assertEquals(TypeConverter.stringToTimeNumber("10:10:10am"), 0.4237268518518518);
979  assertEquals(TypeConverter.stringToTimeNumber("22:10:10"), 0.9237268518518519);
980  assertEquals(TypeConverter.stringToTimeNumber("1:10:10"), 0.048726851851851855);
981  assertEquals(TypeConverter.stringToTimeNumber("25:10:10"), 0.048726851851851855);
982});