Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从自定义字段正确获取日期时间值?_Javascript_Date_Timezone_Netsuite_Suitescript - Fatal编程技术网

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

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会正确显示我的值 但我不知

我在RESTlet的服务器端工作

我在英国,所以我的时区与NS服务器不同。当我在datetime自定义字段中输入一个值时,我会像这样指定时区:

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,所以是的,可能是时区问题,我不知道秒数。谢谢。我在您的答案中添加了更多代码以完全解决我的问题。