DateTimeTest.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. <?php
  2. require_once 'testDataFileIterator.php';
  3. class DateTimeTest extends PHPUnit_Framework_TestCase
  4. {
  5. public function setUp()
  6. {
  7. if (!defined('PHPEXCEL_ROOT')) {
  8. define('PHPEXCEL_ROOT', APPLICATION_PATH . '/');
  9. }
  10. require_once(PHPEXCEL_ROOT . 'PHPExcel/Autoloader.php');
  11. PHPExcel_Calculation_Functions::setCompatibilityMode(PHPExcel_Calculation_Functions::COMPATIBILITY_EXCEL);
  12. }
  13. /**
  14. * @dataProvider providerDATE
  15. */
  16. public function testDATE()
  17. {
  18. $args = func_get_args();
  19. $expectedResult = array_pop($args);
  20. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'DATE'), $args);
  21. $this->assertEquals($expectedResult, $result, null, 1E-8);
  22. }
  23. public function providerDATE()
  24. {
  25. return new testDataFileIterator('rawTestData/Calculation/DateTime/DATE.data');
  26. }
  27. public function testDATEtoPHP()
  28. {
  29. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  30. $result = PHPExcel_Calculation_DateTime::DATE(2012, 1, 31);
  31. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  32. $this->assertEquals(1327968000, $result, null, 1E-8);
  33. }
  34. public function testDATEtoPHPObject()
  35. {
  36. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
  37. $result = PHPExcel_Calculation_DateTime::DATE(2012, 1, 31);
  38. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  39. // Must return an object...
  40. $this->assertTrue(is_object($result));
  41. // ... of the correct type
  42. $this->assertTrue(is_a($result, 'DateTime'));
  43. // ... with the correct value
  44. $this->assertEquals($result->format('d-M-Y'), '31-Jan-2012');
  45. }
  46. public function testDATEwith1904Calendar()
  47. {
  48. PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_MAC_1904);
  49. $result = PHPExcel_Calculation_DateTime::DATE(1918, 11, 11);
  50. PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900);
  51. $this->assertEquals($result, 5428);
  52. }
  53. public function testDATEwith1904CalendarError()
  54. {
  55. PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_MAC_1904);
  56. $result = PHPExcel_Calculation_DateTime::DATE(1901, 1, 31);
  57. PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900);
  58. $this->assertEquals($result, '#NUM!');
  59. }
  60. /**
  61. * @dataProvider providerDATEVALUE
  62. */
  63. public function testDATEVALUE()
  64. {
  65. $args = func_get_args();
  66. $expectedResult = array_pop($args);
  67. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'DATEVALUE'), $args);
  68. $this->assertEquals($expectedResult, $result, null, 1E-8);
  69. }
  70. public function providerDATEVALUE()
  71. {
  72. return new testDataFileIterator('rawTestData/Calculation/DateTime/DATEVALUE.data');
  73. }
  74. public function testDATEVALUEtoPHP()
  75. {
  76. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  77. $result = PHPExcel_Calculation_DateTime::DATEVALUE('2012-1-31');
  78. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  79. $this->assertEquals(1327968000, $result, null, 1E-8);
  80. }
  81. public function testDATEVALUEtoPHPObject()
  82. {
  83. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
  84. $result = PHPExcel_Calculation_DateTime::DATEVALUE('2012-1-31');
  85. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  86. // Must return an object...
  87. $this->assertTrue(is_object($result));
  88. // ... of the correct type
  89. $this->assertTrue(is_a($result, 'DateTime'));
  90. // ... with the correct value
  91. $this->assertEquals($result->format('d-M-Y'), '31-Jan-2012');
  92. }
  93. /**
  94. * @dataProvider providerYEAR
  95. */
  96. public function testYEAR()
  97. {
  98. $args = func_get_args();
  99. $expectedResult = array_pop($args);
  100. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'YEAR'), $args);
  101. $this->assertEquals($expectedResult, $result, null, 1E-8);
  102. }
  103. public function providerYEAR()
  104. {
  105. return new testDataFileIterator('rawTestData/Calculation/DateTime/YEAR.data');
  106. }
  107. /**
  108. * @dataProvider providerMONTH
  109. */
  110. public function testMONTH()
  111. {
  112. $args = func_get_args();
  113. $expectedResult = array_pop($args);
  114. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'MONTHOFYEAR'), $args);
  115. $this->assertEquals($expectedResult, $result, null, 1E-8);
  116. }
  117. public function providerMONTH()
  118. {
  119. return new testDataFileIterator('rawTestData/Calculation/DateTime/MONTH.data');
  120. }
  121. /**
  122. * @dataProvider providerWEEKNUM
  123. */
  124. public function testWEEKNUM()
  125. {
  126. $args = func_get_args();
  127. $expectedResult = array_pop($args);
  128. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'WEEKOFYEAR'), $args);
  129. $this->assertEquals($expectedResult, $result, null, 1E-8);
  130. }
  131. public function providerWEEKNUM()
  132. {
  133. return new testDataFileIterator('rawTestData/Calculation/DateTime/WEEKNUM.data');
  134. }
  135. /**
  136. * @dataProvider providerWEEKDAY
  137. */
  138. public function testWEEKDAY()
  139. {
  140. $args = func_get_args();
  141. $expectedResult = array_pop($args);
  142. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'DAYOFWEEK'), $args);
  143. $this->assertEquals($expectedResult, $result, null, 1E-8);
  144. }
  145. public function providerWEEKDAY()
  146. {
  147. return new testDataFileIterator('rawTestData/Calculation/DateTime/WEEKDAY.data');
  148. }
  149. /**
  150. * @dataProvider providerDAY
  151. */
  152. public function testDAY()
  153. {
  154. $args = func_get_args();
  155. $expectedResult = array_pop($args);
  156. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'DAYOFMONTH'), $args);
  157. $this->assertEquals($expectedResult, $result, null, 1E-8);
  158. }
  159. public function providerDAY()
  160. {
  161. return new testDataFileIterator('rawTestData/Calculation/DateTime/DAY.data');
  162. }
  163. /**
  164. * @dataProvider providerTIME
  165. */
  166. public function testTIME()
  167. {
  168. $args = func_get_args();
  169. $expectedResult = array_pop($args);
  170. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'TIME'), $args);
  171. $this->assertEquals($expectedResult, $result, null, 1E-8);
  172. }
  173. public function providerTIME()
  174. {
  175. return new testDataFileIterator('rawTestData/Calculation/DateTime/TIME.data');
  176. }
  177. public function testTIMEtoPHP()
  178. {
  179. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  180. $result = PHPExcel_Calculation_DateTime::TIME(7, 30, 20);
  181. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  182. $this->assertEquals(27020, $result, null, 1E-8);
  183. }
  184. public function testTIMEtoPHPObject()
  185. {
  186. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
  187. $result = PHPExcel_Calculation_DateTime::TIME(7, 30, 20);
  188. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  189. // Must return an object...
  190. $this->assertTrue(is_object($result));
  191. // ... of the correct type
  192. $this->assertTrue(is_a($result, 'DateTime'));
  193. // ... with the correct value
  194. $this->assertEquals($result->format('H:i:s'), '07:30:20');
  195. }
  196. /**
  197. * @dataProvider providerTIMEVALUE
  198. */
  199. public function testTIMEVALUE()
  200. {
  201. $args = func_get_args();
  202. $expectedResult = array_pop($args);
  203. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'TIMEVALUE'), $args);
  204. $this->assertEquals($expectedResult, $result, null, 1E-8);
  205. }
  206. public function providerTIMEVALUE()
  207. {
  208. return new testDataFileIterator('rawTestData/Calculation/DateTime/TIMEVALUE.data');
  209. }
  210. public function testTIMEVALUEtoPHP()
  211. {
  212. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  213. $result = PHPExcel_Calculation_DateTime::TIMEVALUE('7:30:20');
  214. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  215. $this->assertEquals(23420, $result, null, 1E-8);
  216. }
  217. public function testTIMEVALUEtoPHPObject()
  218. {
  219. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
  220. $result = PHPExcel_Calculation_DateTime::TIMEVALUE('7:30:20');
  221. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  222. // Must return an object...
  223. $this->assertTrue(is_object($result));
  224. // ... of the correct type
  225. $this->assertTrue(is_a($result, 'DateTime'));
  226. // ... with the correct value
  227. $this->assertEquals($result->format('H:i:s'), '07:30:20');
  228. }
  229. /**
  230. * @dataProvider providerHOUR
  231. */
  232. public function testHOUR()
  233. {
  234. $args = func_get_args();
  235. $expectedResult = array_pop($args);
  236. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'HOUROFDAY'), $args);
  237. $this->assertEquals($expectedResult, $result, null, 1E-8);
  238. }
  239. public function providerHOUR()
  240. {
  241. return new testDataFileIterator('rawTestData/Calculation/DateTime/HOUR.data');
  242. }
  243. /**
  244. * @dataProvider providerMINUTE
  245. */
  246. public function testMINUTE()
  247. {
  248. $args = func_get_args();
  249. $expectedResult = array_pop($args);
  250. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'MINUTEOFHOUR'), $args);
  251. $this->assertEquals($expectedResult, $result, null, 1E-8);
  252. }
  253. public function providerMINUTE()
  254. {
  255. return new testDataFileIterator('rawTestData/Calculation/DateTime/MINUTE.data');
  256. }
  257. /**
  258. * @dataProvider providerSECOND
  259. */
  260. public function testSECOND()
  261. {
  262. $args = func_get_args();
  263. $expectedResult = array_pop($args);
  264. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'SECONDOFMINUTE'), $args);
  265. $this->assertEquals($expectedResult, $result, null, 1E-8);
  266. }
  267. public function providerSECOND()
  268. {
  269. return new testDataFileIterator('rawTestData/Calculation/DateTime/SECOND.data');
  270. }
  271. /**
  272. * @dataProvider providerNETWORKDAYS
  273. */
  274. public function testNETWORKDAYS()
  275. {
  276. $args = func_get_args();
  277. $expectedResult = array_pop($args);
  278. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'NETWORKDAYS'), $args);
  279. $this->assertEquals($expectedResult, $result, null, 1E-8);
  280. }
  281. public function providerNETWORKDAYS()
  282. {
  283. return new testDataFileIterator('rawTestData/Calculation/DateTime/NETWORKDAYS.data');
  284. }
  285. /**
  286. * @dataProvider providerWORKDAY
  287. */
  288. public function testWORKDAY()
  289. {
  290. $args = func_get_args();
  291. $expectedResult = array_pop($args);
  292. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'WORKDAY'), $args);
  293. $this->assertEquals($expectedResult, $result, null, 1E-8);
  294. }
  295. public function providerWORKDAY()
  296. {
  297. return new testDataFileIterator('rawTestData/Calculation/DateTime/WORKDAY.data');
  298. }
  299. /**
  300. * @dataProvider providerEDATE
  301. */
  302. public function testEDATE()
  303. {
  304. $args = func_get_args();
  305. $expectedResult = array_pop($args);
  306. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'EDATE'), $args);
  307. $this->assertEquals($expectedResult, $result, null, 1E-8);
  308. }
  309. public function providerEDATE()
  310. {
  311. return new testDataFileIterator('rawTestData/Calculation/DateTime/EDATE.data');
  312. }
  313. public function testEDATEtoPHP()
  314. {
  315. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  316. $result = PHPExcel_Calculation_DateTime::EDATE('2012-1-26', -1);
  317. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  318. $this->assertEquals(1324857600, $result, null, 1E-8);
  319. }
  320. public function testEDATEtoPHPObject()
  321. {
  322. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
  323. $result = PHPExcel_Calculation_DateTime::EDATE('2012-1-26', -1);
  324. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  325. // Must return an object...
  326. $this->assertTrue(is_object($result));
  327. // ... of the correct type
  328. $this->assertTrue(is_a($result, 'DateTime'));
  329. // ... with the correct value
  330. $this->assertEquals($result->format('d-M-Y'), '26-Dec-2011');
  331. }
  332. /**
  333. * @dataProvider providerEOMONTH
  334. */
  335. public function testEOMONTH()
  336. {
  337. $args = func_get_args();
  338. $expectedResult = array_pop($args);
  339. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'EOMONTH'), $args);
  340. $this->assertEquals($expectedResult, $result, null, 1E-8);
  341. }
  342. public function providerEOMONTH()
  343. {
  344. return new testDataFileIterator('rawTestData/Calculation/DateTime/EOMONTH.data');
  345. }
  346. public function testEOMONTHtoPHP()
  347. {
  348. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
  349. $result = PHPExcel_Calculation_DateTime::EOMONTH('2012-1-26', -1);
  350. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  351. $this->assertEquals(1325289600, $result, null, 1E-8);
  352. }
  353. public function testEOMONTHtoPHPObject()
  354. {
  355. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
  356. $result = PHPExcel_Calculation_DateTime::EOMONTH('2012-1-26', -1);
  357. PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
  358. // Must return an object...
  359. $this->assertTrue(is_object($result));
  360. // ... of the correct type
  361. $this->assertTrue(is_a($result, 'DateTime'));
  362. // ... with the correct value
  363. $this->assertEquals($result->format('d-M-Y'), '31-Dec-2011');
  364. }
  365. /**
  366. * @dataProvider providerDATEDIF
  367. */
  368. public function testDATEDIF()
  369. {
  370. $args = func_get_args();
  371. $expectedResult = array_pop($args);
  372. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'DATEDIF'), $args);
  373. $this->assertEquals($expectedResult, $result, null, 1E-8);
  374. }
  375. public function providerDATEDIF()
  376. {
  377. return new testDataFileIterator('rawTestData/Calculation/DateTime/DATEDIF.data');
  378. }
  379. /**
  380. * @dataProvider providerDAYS360
  381. */
  382. public function testDAYS360()
  383. {
  384. $args = func_get_args();
  385. $expectedResult = array_pop($args);
  386. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'DAYS360'), $args);
  387. $this->assertEquals($expectedResult, $result, null, 1E-8);
  388. }
  389. public function providerDAYS360()
  390. {
  391. return new testDataFileIterator('rawTestData/Calculation/DateTime/DAYS360.data');
  392. }
  393. /**
  394. * @dataProvider providerYEARFRAC
  395. */
  396. public function testYEARFRAC()
  397. {
  398. $args = func_get_args();
  399. $expectedResult = array_pop($args);
  400. $result = call_user_func_array(array('PHPExcel_Calculation_DateTime', 'YEARFRAC'), $args);
  401. $this->assertEquals($expectedResult, $result, null, 1E-8);
  402. }
  403. public function providerYEARFRAC()
  404. {
  405. return new testDataFileIterator('rawTestData/Calculation/DateTime/YEARFRAC.data');
  406. }
  407. }