Преобразование между v8:: значение в дату
Я пишу аддон C++ на v8, используя Nan. Один из аргументов конструктора имеет тип Date. IsDate возвращает true, но я не знаю, как преобразовать его в объект C++ Date, чтобы получить год, месяц и день и т. Д.
void NodeObject::New(const Nan::FunctionCallbackInfo<v8::Value>& info) {
if(info[0]->IsDate()) {
//convert and get year, month and day
boost::gregorian::date d(2016 , 1 ,1);
double price = getPrice(date);
}
}
Спасибо за вашу помощь!
1 ответ
Решение
Вы можете привести значение v8 к объекту Date с помощью функции v8::Date::Cast.
Оттуда вы можете извлечь количество миллисекунд, начиная с эпохи Unix (1 января 1970) с NumberValue
функция.
Затем преобразуйте это число в объект std::time_t, указав количество секунд. static_cast<time_t>(millisSinceEpoch/1000)
От time_t
получить структуру * tm с функцией localtime.
Затем, наконец, извлекаем значения день / месяц / год:
void NodeObject::New(const Nan::FunctionCallbackInfo<v8::Value>& info) {
if(info[0]->IsDate()) {
double millisSinceEpoch = v8::Date::Cast(*info[0])->NumberValue();
std::time_t t = static_cast<time_t>(millisSinceEpoch/1000);
struct tm* ltime = localtime(&t);
int year = ltime->tm_year + 1900;
int month = ltime->tm_mon + 1;
int day = ltime->tm_mday;
boost::gregorian::date d(year, month, day);
double price = getPrice(date);
}
}