void php_cassandra_date_init(INTERNAL_FUNCTION_PARAMETERS) { zval *seconds = NULL; cassandra_date *self; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &seconds) == FAILURE) { return; } if (getThis() && instanceof_function(Z_OBJCE_P(getThis()), cassandra_date_ce TSRMLS_CC)) { self = PHP_CASSANDRA_GET_DATE(getThis()); } else { object_init_ex(return_value, cassandra_date_ce); self = PHP_CASSANDRA_GET_DATE(return_value); } if (seconds == NULL) { self->date = cass_date_from_epoch(time(NULL)); } else { if (Z_TYPE_P(seconds) != IS_LONG) { INVALID_ARGUMENT(seconds, "a number of seconds since the Unix Epoch"); } self->date = cass_date_from_epoch(Z_LVAL_P(seconds)); } }
/* {{{ Cassandra\Date::fromDateTime() */ PHP_METHOD(Date, fromDateTime) { cassandra_date *self; zval *zdatetime; php5to7_zval retval; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zdatetime) == FAILURE) { return; } zend_call_method_with_0_params(PHP5TO7_ZVAL_MAYBE_ADDR_OF(zdatetime), php_date_get_date_ce(), NULL, "gettimestamp", &retval); if (!PHP5TO7_ZVAL_IS_UNDEF(retval) && Z_TYPE_P(PHP5TO7_ZVAL_MAYBE_P(retval)) == IS_LONG) { object_init_ex(return_value, cassandra_date_ce); self = PHP_CASSANDRA_GET_DATE(return_value); self->date = cass_date_from_epoch(PHP5TO7_Z_LVAL_MAYBE_P(retval)); zval_ptr_dtor(&retval); return; } }
CassError insert_into(CassSession* session, const char* key) { CassError rc = CASS_OK; CassStatement* statement = NULL; CassFuture* future = NULL; cass_uint32_t d; cass_int64_t t; const char* query = "INSERT INTO examples.date_time (key, d, t) VALUES (?, ?, ?);"; time_t now = time(NULL); d = cass_date_from_epoch(now); t = cass_time_from_epoch(now); statement = cass_statement_new(query, 3); cass_statement_bind_string(statement, 0, key); cass_statement_bind_uint32(statement, 1, d); cass_statement_bind_int64(statement, 2, t); future = cass_session_execute(session, statement); cass_future_wait(future); rc = cass_future_error_code(future); if (rc != CASS_OK) { print_error(future); } cass_future_free(future); cass_statement_free(statement); return rc; }
TEST(DateTimeUnitTests, DateFromEpoch) { EXPECT_EQ(cass_date_from_epoch(0), CASS_DATE_EPOCH); EXPECT_EQ(cass_date_from_epoch(24 * 3600), CASS_DATE_EPOCH + 1); EXPECT_EQ(cass_date_from_epoch(2 * 24 * 3600), CASS_DATE_EPOCH + 2); }
TEST(DateTimeUnitTests, Simple) { time_t now = ::time(NULL); cass_uint32_t date = cass_date_from_epoch(now); cass_int64_t time = cass_time_from_epoch(now); EXPECT_EQ(cass_date_time_to_epoch(date, time), now); }