如何正确地从自定义字段中获取日期时间值?
问题描述:
我在RESTlets中的serverside中工作。如何正确地从自定义字段中获取日期时间值?
我在英国,所以我有一个不同的时区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
这个值有两个问题:
- 时间不对。
- 秒数为零。
我不在乎目前的秒数,但我怎么能让时间正确?据推测,我在时区做错了事。
答
你得到使用从对象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
答
我只是将它转换自己。如果是8小时...
dateTimeValue.setHours(dateTimeValue.getHours() + 8);
你似乎是指定的“美国/洛杉矶”时区(即UTC-0800),但第二个例子中没有时区。显然你在英国,可能是UTC + 0000。两者之间的时差是-08:00所以是的,可能是一个时区问题(我不知道秒)。 – RobG