jsl 中的日期函数。我有一个表,其中包含所有行的时间戳。
但我只需要最近 7 天的数据。 有没有一种简单的方法可以删除过去 7 天的所有数据。
jsl 新手,任何输入都会有帮助。
回复:jsl 中的日期函数。这是一个完整的脚本,应该会显示结果
Names Default to Here( 1 );
dt = New Table( "test",
add rows( 100 ),
New Column( "start date",
formula( Random Uniform( Today() - In Days( 12 ), Today() ) ),
Format( "m/d/y", 10 )
)
);
dt:start date << delete formula;
New Column( "START_SHORT_DATE",
Formula( :start date - Time Of Day( :start date ) ),
Format( "m/d/y", 10 ),
);
New Column( "Todays Date",
Formula( Today() - Time Of Day( Today() ) ),
Format( "m/d/y", 10 )
);
New Column( "Ref Date",
Formula( Today() - In Days( 7 ) ),
Format( "m/d/y", 10 ),
);
Current Data Table() << select where( :Ref Date < :START_SHORT_DATE );
回复:jsl 中的日期函数。抱歉我没能早点发现这一点。 您需要 Run Formulas() 以确保在 SelectWhere() 之前计算所有公式。
Clear Symbols();
Delete Symbols();
clear globals();
//Open master data list
S = Open("~/Downloads/sample.xlsx");
New Column( "START_SHORT_DATE",
Formula( :start date - Time Of Day( :start date ) ),
Format( "m/d/y", 10 ),
);
New Column( "Todays Date",
Formula( Today() - Time Of Day( Today() ) ),
Format( "m/d/y", 10 )
);
New Column( "Ref Date",
Formula( Today() - In Days( 7 ) ),
Format( "m/d/y", 10 ),
);
s << run formulas();
s << select where( :Ref Date < :START_SHORT_DATE );
顺便说一句:您实际上并不需要所有公式列来执行此操作。
Clear Symbols();
Delete Symbols();
Clear Globals();
//Open master data list
S = Open( "~/Downloads/sample.xlsx" );
s << select where(
(Today() - Time Of Day( Today() ) - In Days( 7 )) < :start date - Time Of Day( :start date )
);
回复:jsl 中的日期函数。我复制了完全相同的代码并尝试运行。所有列均已正确创建。但以下行似乎不起作用 -
”
<SPAN class="token function">current data table</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">)</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> select where</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Ref Date <SPAN class="token operator"><</SPAN> <SPAN class="token punctuation">:</SPAN>START_SHORT_DATE <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
没有选择任何内容。我尝试使用大于、小于和等于运算符。似乎没有任何效果。
回复:jsl 中的日期函数。问题是函数短日期()和缩写日期()返回字符串而不是日期值。 您无法将日期值(数字)与字符串进行比较。
试试这个:
New Column( "START_SHORT_DATE",
Formula( :start date - Time Of Day( :start date ) ),
Format( "m/d/y", 10 ),
);
New Column( "Todays Date",
Formula( Today() - Time Of Day( Today() ) ),
Format( "m/d/y", 10 )
);
New Column( "Ref Date",
Formula( Today() - In Days( 7 ) ),
Format( "m/d/y", 10 ),
);
current data table() << select where( :Ref Date < :START_SHORT_DATE );
回复:jsl 中的日期函数。这是代码 -
Clear Symbols();
Delete Symbols();
clear globals();
//Open master data list
S = Open("C:\Enthu\sample.xlsx","invisible");
current data table(S);
New Column( "START_SHORT_DATE", Numeric, Formula( Short Date( :start date ) ), );
New Column("Todays Date", Character,Formula(Abbrev Date(today())));
New Column("Ref Date", Character,Formula(Abbrev Date(today()-In Days(7))));
S << select where( :Ref Date < :START_SHORT_DATE );
回复:jsl 中的日期函数。您能否显示您正在使用的不起作用的确切代码,并且您能否提供数据表的示例?
回复:jsl 中的日期函数。感谢您的回复。正如我上面提到的,我创建了一个新专栏并打印了 Today() - In Days(7) ,效果非常好。
此后,如果我尝试比较两列,我看不到任何结果/错误。 所有日期列都是数字。
回复:jsl 中的日期函数。我没有可用的 JMP 12 来验证 In Days() 函数是否可用。然而,由于 In Days() 所做的只是确定一天中的秒数,然后将结果乘以 (7) 中的数字,因此您可以将公式更改为:
today()-7*60*60*24
回复:jsl 中的日期函数。这段脚本不适合我。
“ Today() - Indays(7) 部分可以工作,但日期比较出现问题。
调试器没有显示任何错误,但当我运行它时没有任何反应。 我正在使用 JMP 12。 那是问题吗?
回复:jsl 中的日期函数。dt << select where( today() - In Days( 7 ) < :Your date column );
dt << delete rows;
这将选择日期列(替换 JSL 第一行中的名称)小于当前日期时间 - 7 天的所有行。然后删除行将删除所有选定的行。
如果您希望删除午夜之前 7 天的行,而不是该时间点 (today()) 之前的 7 天,那么您需要从 Today() 函数值中减去当前时间。
dt << select where( today() - Time of Day( today() ) - In Days( 7 ) < :Your date column );
dt << delete rows;