new Date()预定脚本返回UTC而不是本地时间

时间:2016-01-22 01:51:18

标签: netsuite suitescript

我的库中有一个函数可以返回当前日期:

function currentDate(addDays) {
    if (addDays == null||addDays == undefined) { 
        addDays = 0; 
    }
    var currentdate = new Date();
    var current = nlapiAddDays(currentdate,addDays);
    var day = current.getDate();
    var month = current.getMonth()+1
    var year = current.getFullYear();
    return day+'/'+month+'/'+year;
}

一切正常,直到我运行使用此功能的预定脚本,此时返回的日期是UTC,而不是我们当地的时间。在这个函数中是否有一种简单的转换方法没有需要外部库?

3 个答案:

答案 0 :(得分:4)

这是我多年来使用的一个utils函数。

function getCompanyDate(){
    var currentDateTime = new Date();
    var companyTimeZone = nlapiLoadConfiguration('companyinformation').getFieldText('timezone');
    var timeZoneOffSet = (companyTimeZone.indexOf('(GMT)') == 0) ? 0 : new Number(companyTimeZone.substr(4, 6).replace(/\+|:00/gi, '').replace(/:30/gi, '.5'));
    var UTC = currentDateTime.getTime() + (currentDateTime.getTimezoneOffset() * 60000);
    var companyDateTime = UTC + (timeZoneOffSet * 60 * 60 * 1000);

    return new Date(companyDateTime);
}

它使用贵公司的NetSuite设置和时区。假设您的NetSuite设置正确,这将在正确的时区返回日期。

你可以基本上做到:

function currentDate(addDays) {
if (addDays == null||addDays == undefined) { 
    addDays = 0; 
}
var currentdate = getCompanyDate();
var current = nlapiAddDays(currentdate,addDays);
var day = current.getDate();
var month = current.getMonth()+1
var year = current.getFullYear();
return day+'/'+month+'/'+year;
}

答案 1 :(得分:0)

这就是我所做的,但你需要使用使用单位,因为你必须创建记录。

首先,我创建一个隐藏的自定义日期/时间字段。然后我使用以下代码。

var record = nlapiCreateRecord(<recordtype>);
record.setDateTimeValue(<fieldid>, nlapiDateToString(new Date(), 'datetimetz', 5);
var userDateTime = record.getFieldValue(<fieldid>); 

变量userDateTime现在应该在本地时区。

nlapiSetDateTimeValue()API函数会将日期/时间值转换为用户的时区。下面是它的语法:

nlapiSetDateTimeValue(fieldId,dateTime,timeZone)

  1. fieldId =日期/时间字段的ID。
  2. dateTime =要转换的日期值。
  3. timeZone =传递日期的时区。如果它是服务器端脚本,它通常在太平洋,所以我们传递Olson值为5。

答案 2 :(得分:0)

@ lez-yeoh getCompanyDate的Suitescript 2.0版本

function getCompanyDate(){
    var currentDateTime = new Date();
    var companyTimeZone = config.load({ type: config.Type.COMPANY_INFORMATION }).getText({ fieldId: 'timezone' });
    var timeZoneOffSet = (companyTimeZone.indexOf('(GMT)') == 0) ? 0 : Number(companyTimeZone.substr(4, 6).replace(/\+|:00/gi, '').replace(/:30/gi, '.5'));
    var UTC = currentDateTime.getTime() + (currentDateTime.getTimezoneOffset() * 60000);
    var companyDateTime = UTC + (timeZoneOffSet * 60 * 60 * 1000);

    return new Date(companyDateTime);
}