永洪社区

标题: 在脚本里调用today函数报错 [打印本页]

作者: zhhony    时间: 2022-8-22 09:50
标题: 在脚本里调用today函数报错
本帖最后由 root 于 2022-8-22 10:10 编辑

版本:9.4.2.2桌面版
PS:问题一解决了,是我应该在前面的某段代码里把today作为变量名给覆盖掉了。关了软件重新进去这段代码就可以运行了。



PS:请帮忙看一下问题二



一、我尝试在脚本里面调用today(),目的是取当前系统日期,并赋值给我的globalDataSelect日期过滤控件。但是我遇到了报错。

源代码我贴一下:

  1. function transformStrByTime(timeStr) { //将文本字符串类转化为时间类
  2.     timeStrList = timeStr.split('-')
  3.     var year = Number(timeStrList[0]);
  4.     var month = Number(timeStrList[1]);
  5.     var day = Number(timeStrList[2]);
  6.     return date(year, month, day);
  7. }

  8. function getGlobalDateSelectTime(bar, flag) { //获取日期过滤组件的值
  9.     var year;
  10.     var month;
  11.     var day;
  12.     if (flag == 'start') {
  13.         var TimFroBar = right(bar.firstDates[0], len(bar.firstDates[0]) - 1);
  14.         var TimFroBarList = TimFroBar.split('-');
  15.     } else if (flag == 'end') {
  16.         var TimFroBar = right(bar.secondDates[0], len(bar.secondDates[0]) - 1);
  17.         var TimFroBarList = TimFroBar.split('-');
  18.     }
  19.     year = Number(TimFroBarList[0]);
  20.     month = Number(TimFroBarList[1]) + 1;
  21.     day = Number(TimFroBarList[2]);
  22.     TimFroBar = date(year, month, day);
  23.     return TimFroBar
  24. };

  25. function getCurrentDateSourceTime(bar, flag) { //获取日期范围控件的值
  26.     if (flag == 'start') {
  27.         return bar.getSelectedObjects()[0]
  28.     } else if (flag == 'end') {
  29.         return bar.getSelectedObjects().slice(-1)[0]
  30.     }
  31. }

  32. function switching(key) { //输入0的时候返回1,输入1的时候返回0
  33.     return -key + 1
  34. }

  35. //定义左上角时间控件的值
  36. var currentDate = now();
  37. globalDateNow.data = '当前日期:' + formatDate(currentDate, "yyyy年MM月dd日 HH点mm分");

  38. //定义报告期间的起始和结束日期
  39. var theDayofToday = today(); //  <--------------------------------------------------------------------------------<<<<<报错的行<<<<<
  40. globalDataSelect.secondDates = ["t" + currentDate] ; //最终日期;
  41. globalDataSelect.firstDates = eomonth(currentDate, 1) ; //起始日期

  42. //获取报告期间的起始和结束时间
  43. param["globalDataSelectByfirst"] = getGlobalDateSelectTime(globalDataSelect, 'start');
  44. param["globalDataSelectBySecond"] = getGlobalDateSelectTime(globalDataSelect, 'end');

  45. //让currentDateSource控件包含最小值
  46. currentDateSource.includeMin = true;

  47. //获取currentDateSource控件选择的最小值和最大值
  48. param["currentDateSourceByStart"] = getCurrentDateSourceTime(currentDateSource,'start');
  49. param["currentDateSourceByEnd"] = getCurrentDateSourceTime(currentDateSource,'end');

  50. var imageKey = 0;
  51. currentDateSourceMode.image = '家庭账本/mode' + imageKey + '.png';
  52. currentDateSourceModeLab.data = '吼';

复制代码
不知道是什么情况这是。

二、另外我发现一个不知道是不是bug的问题
我尝试调取日期控件的firstDates和secondDates方法,目的是取控件所选择的两个日期,但是我发现返回的月份一直都比选择的月份少一个月,导致我不得不在函数里给月份+1(详解上面代码的getGlobalDateSelectTime函数),不知道是本来就这么设计的,还是说是一个bug。



作者: yhdata_yzm    时间: 2022-8-22 09:50
root 发表于 2022-8-22 10:26
bar我放在那里是想代表日期过滤组件。
使用起来我是这么使用的

https://www.yonghongtech.com/hel ... ml#datefilterformat 你看看这个月份是0-11所以都要加1的
作者: yhdata_yzm    时间: 2022-8-22 10:03
函数这么写没错啊!
作者: zhhony    时间: 2022-8-22 10:06
yhdata_yzm 发表于 2022-8-22 10:03
函数这么写没错啊!

你是说那个today是吧,对啊,就一个简单的函数调用,不知道为啥会报错
作者: zhhony    时间: 2022-8-22 10:08
yhdata_yzm 发表于 2022-8-22 10:03
函数这么写没错啊!

噢找到原因了,我应该是不小心把today重新赋值了,关了软件重开就没事了
作者: lwaaa    时间: 2022-8-22 10:08
是把函数识别成你写的脚本,可以把today删除,然后在函数中双击选中today,看看;或者直接把你这一行放到最上面一行看看
作者: zhhony    时间: 2022-8-22 10:12
lwaaa 发表于 2022-8-22 10:08
是把函数识别成你写的脚本,可以把today删除,然后在函数中双击选中today,看看;或者直接把你这一行放到最 ...

嗯,问题一搞定了,是我写的问题。现在就问题二不知道是啥情况。
作者: lwaaa    时间: 2022-8-22 10:22
root 发表于 2022-8-22 10:12
嗯,问题一搞定了,是我写的问题。现在就问题二不知道是啥情况。

函数 中 bar是什么,从哪里来的 bar.firstDates[0],这个是不是有问题
作者: zhhony    时间: 2022-8-22 10:26
本帖最后由 root 于 2022-8-22 10:38 编辑
lwaaa 发表于 2022-8-22 10:22
函数 中 bar是什么,从哪里来的 bar.firstDates[0],这个是不是有问题

bar我放在那里是想代表日期过滤组件。我在设计器里有个叫globalDataSelect的日期过滤组件。bar本身没有firstDates,但是globalDataSelect有。但是如果我把日期控件赋值给了bar,也就是bar = globalDataSelect。那么globalDataSelect的方法应该就能给bar调用了吧


我不太懂js,我是用python的编程思路去理解的,不知道这么使用对不对。
使用起来我是这么写的
  1. param["globalDataSelectByfirst"] = getGlobalDateSelectTime(globalDataSelect, 'start');
复制代码
传入日期过滤组件globalDataSelect,以及关键词'start',然后执行start对应的那部分代码。

作者: zhhony    时间: 2022-8-22 10:39
yhdata_yzm 发表于 2022-8-22 10:36
https://www.yonghongtech.com/help/Z-Suite/9.4/ch/datefilterscript.html#datefilterformat 你看看这个 ...

哈哈,好的,我还以为是bug。
作者: zhhony    时间: 2022-8-22 10:42
yhdata_yzm 发表于 2022-8-22 09:50
https://www.yonghongtech.com/help/Z-Suite/9.4/ch/datefilterscript.html#datefilterformat 你看看这个 ...

还有请问有现成的方法函数之类的可以做这种日期和现实日期的转换吗,不然我还得指定月份+1
作者: yhdata_yzm    时间: 2022-8-22 10:44
root 发表于 2022-8-22 10:42
还有请问有现成的方法函数之类的可以做这种日期和现实日期的转换吗,不然我还得指定月份+1 ...

木有现成的函数
作者: zhhony    时间: 2022-8-22 10:45
yhdata_yzm 发表于 2022-8-22 10:44
木有现成的函数

那我自己编吧




欢迎光临 永洪社区 (https://club.yonghongtech.com/) Powered by Discuz! X3.4