Преобразование между 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);         
  }
}
Другие вопросы по тегам