new Date() Scheduled 脚本返回 UTC 而不是本地时间
new Date() Scheduled Script returning UTC not local time
我的库中有一个函数可以return当前日期:
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;
}
一切正常,直到我 运行 一个使用此功能的预定脚本,此时 returned 日期是 UTC,而不是我们的本地时间。在这个函数中是否有一种简单的转换方法不需要外部库?
这是我使用多年的 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 设置正确,这将 return 正确时区的日期。
然后你基本上可以做:
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;
}
这就是我所做的,但是您需要消耗使用单位,因为您必须创建记录。
首先,我创建了一个隐藏的自定义 Date/Time 字段。然后我使用下面的代码。
var record = nlapiCreateRecord(<recordtype>);
record.setDateTimeValue(<fieldid>, nlapiDateToString(new Date(), 'datetimetz', 5);
var userDateTime = record.getFieldValue(<fieldid>);
变量 userDateTime 现在应该在本地时区。
nlapiSetDateTimeValue() API 函数会将 date/time 值转换为用户的时区。下面是它的语法:
nlapiSetDateTimeValue(fieldId, dateTime, timeZone)
- fieldId = date/time 字段的 ID。
- dateTime = 要转换的日期值。
- timeZone = 传递日期的时区。如果它是服务器端脚本,它通常在太平洋地区,所以我们传递 Olson 值 5。
@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);
}
我的库中有一个函数可以return当前日期:
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;
}
一切正常,直到我 运行 一个使用此功能的预定脚本,此时 returned 日期是 UTC,而不是我们的本地时间。在这个函数中是否有一种简单的转换方法不需要外部库?
这是我使用多年的 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 设置正确,这将 return 正确时区的日期。
然后你基本上可以做:
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;
}
这就是我所做的,但是您需要消耗使用单位,因为您必须创建记录。
首先,我创建了一个隐藏的自定义 Date/Time 字段。然后我使用下面的代码。
var record = nlapiCreateRecord(<recordtype>);
record.setDateTimeValue(<fieldid>, nlapiDateToString(new Date(), 'datetimetz', 5);
var userDateTime = record.getFieldValue(<fieldid>);
变量 userDateTime 现在应该在本地时区。
nlapiSetDateTimeValue() API 函数会将 date/time 值转换为用户的时区。下面是它的语法:
nlapiSetDateTimeValue(fieldId, dateTime, timeZone)
- fieldId = date/time 字段的 ID。
- dateTime = 要转换的日期值。
- timeZone = 传递日期的时区。如果它是服务器端脚本,它通常在太平洋地区,所以我们传递 Olson 值 5。
@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);
}