如何正确地从自定义字段中获取日期时间值?

时间:2017-02-09 18:29:55

标签: javascript date timezone netsuite suitescript

我在RESTlet的服务器端工作。

我在英国,所以我和NS服务器有不同的时区。当我将值放入日期时间自定义字段时,我指定时区如下:

var dateTime = new Date();

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

dateTime是2017-02-10T18:24:02.000Z

然后NS正确显示我的价值

enter image description here

但是我看不出如何正确地获得价值。

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

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

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

这个值有两个问题:

  1. 时机不对。
  2. 秒数归零。
  3. 我现在不介意秒,但我怎么能把时间做好呢?据推测,我对时区做错了。

2 个答案:

答案 0 :(得分:2)

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

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

var id = result.getId();

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

var record = nlapiLoadRecord(recordType, id);

where" 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

答案 1 :(得分:-3)

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

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