【问题标题】:How to get datetime value from a custom field correctly?如何正确从自定义字段中获取日期时间值?
【发布时间】:2017-02-09 18:29:55
【问题描述】:

我在 RESTlets 的服务器端工作。

我在英国,所以我的时区与 NS 服务器不同。当我将值放入日期时间自定义字段时,我会像这样指定时区:

var dateTime = new Date();

record.setDateTimeValue(‘fieldid', nlapiDateToString(dateTime, 'datetimetz'), ‘America/Los_Angeles’);

日期时间为 2017-02-10T18:24:02.000Z

然后 NS 正确显示我的值

但我看不出如何正确获取价值。

我在搜索结果中得到了值,我尝试了这个:

var dateTimeValue = nlapiStringToDate(result.getValue(‘fieldid'), 'datetime');

但这会返回 2017-02-11T02:24:00.000Z

这个值有两个问题:

  1. 时间不对。
  2. 秒数归零。

我现在不介意秒数,但我怎样才能让时间正确?大概我在时区方面做错了。

【问题讨论】:

  • 您似乎在第一个示例中指定了“America/Los_Angeles”(UTC-0800)的时区,但在第二个示例中没有指定时区。显然你在英国,这可能是 UTC+0000。两者之间的时差是-08:00,所以是的,可能是时区问题(我不知道秒数)。

标签: javascript date timezone netsuite suitescript


【解决方案1】:

您正在使用对象 nlobjSearchResult 中的方法获取日期,该方法不允许您指定时区。为了获得正确的值,不幸的是在这种情况下您需要加载记录,然后使用时区 API 获取值。

例如,在您的情况下,您将首先从“结果”对象中获取记录 ID:

var id = result.getId();

然后,您使用加载记录 API 来加载记录:

var record = nlapiLoadRecord(recordType, id);

其中“recordType”是您记录类型/实体的 ID。

最后,您使用日期/时区 API 在您需要的时区中正确获取日期/时间字段:

var nsDateTimeValue = record.getDateTimeValue('fieldId', 'America/Los_​Angeles'); 
//nsDateTimeValue is a string

var jsDateTimeValue = nlapiStringToDate(nsDateTimeValue, 'datetimetz');
//jsDateTimeValue is a JavaScript Date object in the correct timezone with seconds

【讨论】:

  • 谢谢。我在您的答案中添加了更多代码以完全解决我的问题。
【解决方案2】:

我会自己转换它。如果是 +8 小时...

dateTimeValue.setHours(dateTimeValue.getHours() + 8);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2018-01-02
    相关资源
    最近更新 更多