服务器端脚本
服务器端的脚本是指SuiteScript中Server-side Script,即运行是在服务器上完成的脚本。这类包括User Event(用户事件),Map/Reduce(映射/减少),RESTlet(外界调用NetSuite的接口),Mass Update(大量更新),Scheduled(定时)等等类型,即非客户端脚本都是服务器端脚本。
在开发时如果使用new Date()
创建,JavaScript的时间类型的对象的时区是服务器时间,一般为GMT(格林威治时间)。
var test = new Date();
log.debug('test', test);
//北京时间是2021年7月24日10:07PM
//2021-07-24T14:07:21.719Z
客户端脚本
客户端脚本(ClientScript)的时区是由本地设备通过浏览器提供的,一般情况下是本地设备设置的时区和时间。
function pageInit() {
console.log(new Date());
//北京时间2021年7月25日7:11AM
//电脑修改成澳大利亚东部时间,console结果是Sun Jul 25 2021 09:11:22 GMT+1000 (Australian Eastern Standard Time)
}
潜在冲突例一:服务端脚本根据当前日期做逻辑推断
比如用户位于东八区,当创建一条记录之后与一个日期型字段custbody_deadline作比较判断哪个日期更靠后,结果有时候正确,有时候错误。
function beforeSubmit(context) {
var recObj = context.newRecord;
var currentDate = new Date();//"2021-07-20T14:07:21.719Z"
var getDate = recObj.getValue({fieldId: 'custbody_deadline'});"2021-07-20T07:00:00.000Z"
log.debug("is it overdue?", getDate > currentDate);
}
这种情况下首先不确定因素之一就是new Date()
的返回的日期实际是带有时间的日期,而通过recObj.getValue()
返回的值是不带日期的,而比较过程是将二者转换成为毫秒再比较,日期一样的情况下new Date()
几乎绝对大于get到的时间(除非0点0分0秒那一瞬间,几乎不可能)。
(待续)
Comments