Javascript 如何从自定义字段正确获取日期时间值?
我在RESTlet的服务器端工作 我在英国,所以我的时区与NS服务器不同。当我在datetime自定义字段中输入一个值时,我会像这样指定时区:Javascript 如何从自定义字段正确获取日期时间值?,javascript,date,timezone,netsuite,suitescript,Javascript,Date,Timezone,Netsuite,Suitescript,我在RESTlet的服务器端工作 我在英国,所以我的时区与NS服务器不同。当我在datetime自定义字段中输入一个值时,我会像这样指定时区: var dateTime = new Date(); record.setDateTimeValue(‘fieldid', nlapiDateToString(dateTime, 'datetimetz'), ‘America/Los_Angeles’); 日期时间是2017-02-10T18:24:02.000Z 然后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
此值有两个问题:
时间不对。
秒数归零。
我不在乎现在的秒数,但我怎样才能使时间正确呢?大概是我在时区上做错了什么。我会自己转换它。如果是+8小时
dateTimeValue.setHours(dateTimeValue.getHours() + 8);
您正在使用对象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
您似乎指定了“America/Los_Angeles”的时区,在第一个示例中是UTC-0800,但在第二个示例中没有指定时区。显然你在英国,可能是UTC+0000。两者之间的时差是-08:00,所以是的,可能是时区问题,我不知道秒数。谢谢。我在您的答案中添加了更多代码以完全解决我的问题。