1+ /*
2+ +----------------------------------------------------------------------+
3+ | XlsWriter Extension |
4+ +----------------------------------------------------------------------+
5+ | Copyright (c) 2017-2018 The Viest |
6+ +----------------------------------------------------------------------+
7+ | http://www.viest.me |
8+ +----------------------------------------------------------------------+
9+ | Author: viest <[email protected] > | 10+ +----------------------------------------------------------------------+
11+ */
12+
13+ #include "xlswriter.h"
14+ #include "ext/date/php_date.h"
15+ #include "ext/standard/php_math.h"
16+
17+ zend_long date_double_to_timestamp (double value ) {
18+ double days , partDay , hours , minutes , seconds ;
19+
20+ days = floor (value );
21+ partDay = value - days ;
22+ hours = floor (partDay * 24 );
23+ partDay = partDay * 24 - hours ;
24+ minutes = floor (partDay * 60 );
25+ partDay = partDay * 60 - minutes ;
26+ seconds = _php_math_round (partDay * 60 , 0 , PHP_ROUND_HALF_UP );
27+
28+ zval datetime ;
29+ php_date_instantiate (php_date_get_date_ce (), & datetime );
30+ php_date_initialize (Z_PHPDATE_P (& datetime ), ZEND_STRL ("1899-12-30" ), NULL , NULL , 1 );
31+
32+ zval _modify_args [1 ], _modify_result ;
33+ smart_str _modify_arg_string = {0 };
34+ if (days >= 0 ) {
35+ smart_str_appendl (& _modify_arg_string , "+" , 1 );
36+ }
37+ smart_str_append_long (& _modify_arg_string , days );
38+ smart_str_appendl (& _modify_arg_string , " days" , 5 );
39+ ZVAL_STR (& _modify_args [0 ], _modify_arg_string .s );
40+ call_object_method (& datetime , "modify" , 1 , _modify_args , & _modify_result );
41+ zval_ptr_dtor (& datetime );
42+
43+ zval _set_time_args [3 ], _set_time_result ;
44+ ZVAL_LONG (& _set_time_args [0 ], (zend_long )hours );
45+ ZVAL_LONG (& _set_time_args [1 ], (zend_long )minutes );
46+ ZVAL_LONG (& _set_time_args [2 ], (zend_long )seconds );
47+ call_object_method (& _modify_result , "setTime" , 3 , _set_time_args , & _set_time_result );
48+ zval_ptr_dtor (& _modify_result );
49+
50+ zval _format_args [1 ], _format_result ;
51+ ZVAL_STRING (& _format_args [0 ], "U" );
52+ call_object_method (& _set_time_result , "format" , 1 , _format_args , & _format_result );
53+ zval_ptr_dtor (& _set_time_result );
54+
55+ zend_long timestamp = ZEND_STRTOL (Z_STRVAL (_format_result ), NULL ,10 );
56+ zval_ptr_dtor (& _format_result );
57+
58+ return timestamp ;
59+ }
0 commit comments