1

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

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,而不是我们的本地时间。在此函数中是否有一种无需外部库的简单转换方法

4

3 回答 3

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;
}
于 2016-01-22T02:57:14.600 回答
2

Suitescript 2.0 版本的@lez-yeoh getCompanyDate

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);
}
于 2018-12-11T08:29:29.950 回答
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。
于 2016-01-22T06:21:18.287 回答