/* {{{ Cassandra\Date::__toString() */ PHP_METHOD(Date, __toString) { cassandra_date *self; char *ret = NULL; if (zend_parse_parameters_none() == FAILURE) { return; } self = PHP_CASSANDRA_GET_DATE(getThis()); spprintf(&ret, 0, "Cassandra\\Date(seconds=%lld)", cass_date_time_to_epoch(self->date, 0)); PHP5TO7_RETVAL_STRING(ret); efree(ret); }
CassError select_from(CassSession* session, const char* key) { CassError rc = CASS_OK; CassStatement* statement = NULL; CassFuture* future = NULL; const char* query = "SELECT * FROM examples.date_time WHERE key = ?"; statement = cass_statement_new(query, 1); cass_statement_bind_string(statement, 0, key); future = cass_session_execute(session, statement); cass_future_wait(future); rc = cass_future_error_code(future); if (rc != CASS_OK) { print_error(future); } else { const CassResult* result = cass_future_get_result(future); CassIterator* iterator = cass_iterator_from_result(result); if (cass_iterator_next(iterator)) { cass_uint32_t d; cass_int64_t t; time_t time; const CassRow* row = cass_iterator_get_row(iterator); cass_value_get_uint32(cass_row_get_column(row, 1), &d); cass_value_get_int64(cass_row_get_column(row, 2), &t); time = (time_t)cass_date_time_to_epoch(d, t); printf("Date and time: %s", asctime(localtime(&time))); } cass_result_free(result); cass_iterator_free(iterator); } cass_future_free(future); cass_statement_free(statement); return rc; }
/* {{{ Cassandra\Date::toDateTime() */ PHP_METHOD(Date, toDateTime) { cassandra_date *self; zval *ztime = NULL; cassandra_time* time_obj = NULL; php5to7_zval datetime; php_date_obj *datetime_obj = NULL; char *str; int str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &ztime) == FAILURE) { return; } if (ztime != NULL) { time_obj = PHP_CASSANDRA_GET_TIME(ztime); } self = PHP_CASSANDRA_GET_DATE(getThis()); PHP5TO7_ZVAL_MAYBE_MAKE(datetime); php_date_instantiate(php_date_get_date_ce(), PHP5TO7_ZVAL_MAYBE_P(datetime) TSRMLS_CC); #if PHP_MAJOR_VERSION >= 7 datetime_obj = php_date_obj_from_obj(Z_OBJ(datetime)); #else datetime_obj = zend_object_store_get_object(datetime TSRMLS_CC); #endif str_len = spprintf(&str, 0, "%lld", cass_date_time_to_epoch(self->date, time_obj != NULL ? time_obj->time : 0)); php_date_initialize(datetime_obj, str, str_len, "U", NULL, 0 TSRMLS_CC); efree(str); RETVAL_ZVAL(PHP5TO7_ZVAL_MAYBE_P(datetime), 0, 1); }
/* {{{ Cassandra\Date::seconds() */ PHP_METHOD(Date, seconds) { cassandra_date *self = PHP_CASSANDRA_GET_DATE(getThis()); RETURN_LONG(cass_date_time_to_epoch(self->date, 0)); }
TEST(DateTimeUnitTests, DateTimeToEpoch) { EXPECT_EQ(cass_date_time_to_epoch(CASS_DATE_EPOCH, 0), 0L); // Epoch EXPECT_EQ(cass_date_time_to_epoch(CASS_DATE_EPOCH - 1, 0), -24L * 3600L); // Epoch - 1 day EXPECT_EQ(cass_date_time_to_epoch(CASS_DATE_EPOCH + 1, 0), 24L * 3600L); // Epoch + 1 day }
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); }