作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
JavaScript 的日期构造函数可以解析字符串来创建日期:
var date = new Date("2015");
console.log(date); // Thu Jan 01 2015 06:00:00 GMT+0600 (NOVT)
console.log(date.getTime()); // 1420070400000
我需要在我的 C++ Node.js 插件中进行类似的解析(字符串到日期)。我找到了两种获取 v8:Date 的方法:
static Local<Value> Date::New(Isolate* isolate, double time)
.它需要一个 double 值。
static Date* Date::Cast(v8::Value* obj)
但它简单地将字符串转换为 double :
v8::Local<v8::String> str = Nan::New("2015").ToLocalChecked();
v8::Date *castDate = v8::Date::Cast(*str);
double castVal = castDate->NumberValue();
printf("%f\n", castVal); // 2015.000000, not 1420070400000 :(
v8::Local<v8::Date> newDate =
v8::Date::New(info.GetIsolate(), 2015).As<v8::Date>();
double newVal = newDate->NumberValue();
printf("%f\n", newVal); // 2015.000000
v8 中有哪些方法可以从字符串创建 C++ v8::Date?
更新(2016.01.05):
我在问题标题中添加了“无需从 C++ 执行 JS”。
最佳答案
我的想法有点开箱即用,想出了一些诡计:
v8::Local<v8::Date> tmp = Nan::New<v8::Date>(0).ToLocalChecked();
v8::Local<v8::Function> cons = v8::Local<v8::Function>::Cast(
Nan::Get(tmp, Nan::New("constructor").ToLocalChecked()).ToLocalChecked()
);
const int argc = 1;
v8::Local<v8::Value> argv[argc] = {Nan::New("2015").ToLocalChecked()};
v8::Local<v8::Date> date = v8::Local<v8::Date>::Cast(
Nan::NewInstance(cons, argc, argv).ToLocalChecked()
);
首先,我创建了一个任意的 Date 对象,然后我提取了构造函数,然后使用该函数有效地调用 new Date("2015")
。
您还可以将构造函数保留在您的类中,以便在频繁使用时稍微提高效率。
关于javascript - 是否有一些 v8 函数可以从像 "2015-02-20"这样的字符串创建一个 C++ v8::Date 对象,而无需从 C++ 执行 JS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158318/
我是一名优秀的程序员,十分优秀!