Brilliant! 

Thanks a lot Mark. It now all works. I just had to tweak the macro. The 
javascript function Date() count month and day from zero!!! so I 
subsctracted one for each of them in the macro and now it all works.

I still would like to understand why passing parameters the way Eric (and 
I) are doing is not working :(

thanks a lot for you help.
Philippe

On Tuesday, 1 November 2016 18:37:29 UTC, Mark S. wrote:
>
> This works on my system. Here's how the list is set up:
>
> <$list filter="[!has[draft.of]tag[Stocks]]">
> <$set name=bestbefore value={{!!bestbefore}}>
> <$link to={{!!title}}><$view field="title"/> </$link> <$reveal 
> type="match" default=<<day-left>>  text="YES">
>    @@color:red;( to be discarded )@@
> </$reveal>
> <br/>
> </$set>
> </$list>
>
> This is basically Eric's way, except I'm changing how the variable date 
> gets passed.
>
> Below is  the revised javascript macro. In theory, you should be able to 
> use it with standard parameters (e.g. <<day-left {{!!mydate}}>>) in those 
> cases where you don't need the value used by the calling widget. But you 
> can't use it both ways at the same time, because the version with the 
> parameter takes precedence.
>
> Be sure to make back-ups before testing.
>
> Good luck,
> Mark
>
> /*\
> title: $:/_ppmt/macros/day-left.js
> type: application/javascript
> module-type: macro
>
> Takes current day and best before date and return their difference in days
>
> \*/
>
> (function(){
>
> /*jslint node: true, browser: true */
> /*global $tw: false */
> "use strict";
>
> /*
> Information about this macro
> */
>
> exports.name = "day-left";
>
> exports.params = [
>     {name: "bestbefore"}
> ];
>
> /*
> Run the macro
> */
> exports.run = function(bestbefore) {
>
>     var bb = this.getVariable("bestbefore") ;
>     var bestb4 = "" ;
>     
>     if(bb) bestb4 = bb ;
>     if(bestbefore) bestb4 = bestbefore ;
>
>     //Make each date object.
>       
>         var year= parseInt(bestb4.substring(0,4));
>         var month= parseInt(bestb4.substring(4,6));
>         var day= parseInt(bestb4.substring(6,8));
>     var date1 = new Date(year, month, day);
>     var date2 = new Date();
>
>     //Find difference in milliseconds.
>     var elapsed = date1.getTime()-date2.getTime();
>
>     //Number of milliseconds in a day.
>     var dayMS = 86400000;
>
>     //Convert milliseconds to year months and days
>     var days_diff = Math.floor(elapsed/dayMS);
>     
>     var result = days_diff;
>     if (result>10) { return "NO";}
>         else {return "YES";}
> };
>
> })();
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/tiddlywiki.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/fb39bed0-f7ea-4221-b7ae-82e0e15351e0%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to