2017-02-09 59 views
0

我在RESTlets中的serverside中工作。如何正确地从自定义字段中获取日期时间值?

我在英国,所以我有一个不同的时区NS服务器。当我把一个值转换为日期时间的自定义字段我指定这样的时区:

var dateTime = new Date(); 

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

日期时间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. 秒数为零。

我不在乎目前的秒数,但我怎么能让时间正确?据推测,我在时区做错了事。

+0

你似乎是指定的“美国/洛杉矶”时区(即UTC-0800),但第二个例子中没有时区。显然你在英国,可能是UTC + 0000。两者之间的时差是-08:00所以是的,可能是一个时区问题(我不知道秒)。 – RobG

回答

2

你得到使用从对象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 
+0

谢谢。我在答案中添加了更多代码以完全解决我的问题。 – cja

-3

我只是将它转换自己。如果是8小时...

dateTimeValue.setHours(dateTimeValue.getHours() + 8); 
相关问题