文档管理中心

使用JSVM-API接口进行Date相关开发

简介

JSVM-API中date相关接口用于处理JavaScript Date对象,并在JSVM模块和JavaScript代码之间进行日期数据的转换和处理。这对于在JSVM模块中处理时间和日期相关逻辑非常有用。

基本概念

在JSVM-API中,JavaScript Date对象的数据表示从UTC时间1970年1月1日0时0分0秒起至现在的总毫秒数。

JavaScript Date对象在JavaScript中用于表示和操作日期和时间。它们允许开发者创建表示特定时刻的日期对象,执行日期和时间计算(如添加或减去时间间隔),以及格式化日期为字符串以供显示。

在JSVM-API中,通过提供与Date对象交互的函数,JSVM模块能够更紧密地与JavaScript环境集成,执行复杂的日期和时间相关操作。

接口说明

展开
接口 功能说明
OH_JSVM_CreateDate 创建一个表示给定毫秒数的Date对象。
OH_JSVM_GetDateValue 获取给定JavaScript Date的时间值的Double基础类型值。
OH_JSVM_IsDate 判断一个JavaScript对象是否为Date类型对象。

使用示例

JSVM-API接口开发流程参考使用JSVM-API实现JS与C/C++语言交互开发流程,本文仅展示接口对应C++相关代码。

OH_JSVM_CreateDate

创建一个表示给定毫秒数的Date对象。

cpp部分代码:

收起
自动换行
深色代码主题
复制
  1. #include "napi/native_api.h"
  2. #include "hilog/log.h"
  3. #include "ark_runtime/jsvm.h"
  4. #include <ctime>
  5. // ...
  6. // OH_JSVM_CreateDate的样例方法
  7. static JSVM_Value CreateDate(JSVM_Env env, JSVM_CallbackInfo info)
  8. {
  9. // 通过c接口获取Unix纪元以来经过的秒数,并转化为毫秒数为单位
  10. double value = static_cast<double>(time(nullptr) * 1000);
  11. // 调用OH_JSVM_CreateDate接口将double值转换成表示日期时间的JavaScript值返回出去
  12. JSVM_Value returnValue = nullptr;
  13. JSVM_CALL(OH_JSVM_CreateDate(env, value, &returnValue));
  14. bool isDate = false;
  15. JSVM_CALL(OH_JSVM_IsDate(env, returnValue, &isDate));
  16. if (!isDate) {
  17. OH_LOG_ERROR(LOG_APP, "JSVM IsDate fail");
  18. return returnValue;
  19. }
  20. value = 0;
  21. JSVM_CALL(OH_JSVM_GetDateValue(env, returnValue, &value));
  22. uint64_t time = static_cast<uint64_t>(value) / 1000;
  23. char *date = ctime(reinterpret_cast<time_t *>(&time));
  24. OH_LOG_INFO(LOG_APP, "JSVM CreateDate success:%{public}s", date);
  25. return returnValue;
  26. }
  27. // CreateDate注册回调
  28. static JSVM_CallbackStruct param[] = {
  29. {.data = nullptr, .callback = CreateDate},
  30. };
  31. static JSVM_CallbackStruct *method = param;
  32. // CreateDate方法别名,供JS调用
  33. static JSVM_PropertyDescriptor descriptor[] = {
  34. {"createDate", nullptr, method, nullptr, nullptr, nullptr, JSVM_DEFAULT},
  35. };
  36. // 样例测试js
  37. const char *SRC_CALL_NATIVE = R"JS(createDate())JS";

预期结果:

收起
自动换行
深色代码主题
复制
  1. JSVM CreateDate success:Mon Jul 7 10:42:34 2025

OH_JSVM_GetDateValue

获取给定JavaScript Date的时间值的Double基础类型值。

cpp部分代码:

收起
自动换行
深色代码主题
复制
  1. #include <ctime>
  2. // ...
  3. // OH_JSVM_GetDateValue的样例方法
  4. static JSVM_Value GetDateValue(JSVM_Env env, JSVM_CallbackInfo info)
  5. {
  6. size_t argc = 1;
  7. JSVM_Value args[1] = {nullptr};
  8. JSVM_CALL(OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr));
  9. // 获取传入的Unix Time Stamp时间
  10. double value = 0;
  11. JSVM_CALL(OH_JSVM_GetDateValue(env, args[0], &value));
  12. // 将获取到的Unix Time Stamp时间转化为日期字符串打印
  13. uint64_t time = static_cast<uint64_t>(value) / 1000;
  14. char *date = ctime(reinterpret_cast<time_t *>(&time));
  15. OH_LOG_INFO(LOG_APP, "JSVM GetDateValue success:%{public}s", date);
  16. JSVM_Value returnValue = nullptr;
  17. JSVM_CALL(OH_JSVM_CreateDouble(env, value, &returnValue));
  18. return returnValue;
  19. }
  20. // GetDateValue注册回调
  21. static JSVM_CallbackStruct param[] = {
  22. {.data = nullptr, .callback = GetDateValue},
  23. };
  24. static JSVM_CallbackStruct *method = param;
  25. // GetDateValue方法别名,供JS调用
  26. static JSVM_PropertyDescriptor descriptor[] = {
  27. {"getDateValue", nullptr, method++, nullptr, nullptr, nullptr, JSVM_DEFAULT},
  28. };
  29. // 样例测试js
  30. const char *SRC_CALL_NATIVE = R"JS(getDateValue(new Date(Date.now())))JS";

预期结果:

收起
自动换行
深色代码主题
复制
  1. JSVM GetDateValue success:Mon Jul 7 10:47:08 2025

OH_JSVM_IsDate

判断一个JavaScript对象是否为Date类型对象。

cpp部分代码:

收起
自动换行
深色代码主题
复制
  1. // OH_JSVM_IsDate的样例方法
  2. static JSVM_Value IsDate(JSVM_Env env, JSVM_CallbackInfo info)
  3. {
  4. size_t argc = 1;
  5. JSVM_Value args[1] = {nullptr};
  6. JSVM_CALL(OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr));
  7. bool isDate = false;
  8. JSVM_CALL(OH_JSVM_IsDate(env, args[0], &isDate));
  9. OH_LOG_INFO(LOG_APP, "JSVM IsDate success:%{public}d", isDate);
  10. JSVM_Value result = nullptr;
  11. JSVM_CALL(OH_JSVM_GetBoolean(env, isDate, &result));
  12. return result;
  13. }
  14. // IsDate注册回调
  15. static JSVM_CallbackStruct param[] = {
  16. {.data = nullptr, .callback = IsDate},
  17. };
  18. static JSVM_CallbackStruct *method = param;
  19. // IsDate方法别名,供JS调用
  20. static JSVM_PropertyDescriptor descriptor[] = {
  21. {"isDate", nullptr, method, nullptr, nullptr, nullptr, JSVM_DEFAULT},
  22. };
  23. // 样例测试js
  24. const char *SRC_CALL_NATIVE = R"JS(isDate(new Date(Date.now())))JS";

预期结果:

收起
自动换行
深色代码主题
复制
  1. JSVM IsDate success:1
在 指南 中进行搜索
请输入您想要搜索的关键词