So erhalten Sie das morgige Datum und die Nummer der nächsten Woche zur Verwendung in Tasker

Basierend auf dieser Antwort suche ich nach einer Möglichkeit, das Datum von morgen und die Nummer der nächsten Woche für die Verwendung in der Tasker- App Run Shell Command zu erhalten .

Ich habe versucht:

date -d '+1 day' +"%Y%m%d"und ähnliches, aber ich bekomme immer noch Error: 1.

Im Shell-Emulator bekomme ichbad date '+1 day'

Kann keine Referenz für Android-Shell-Befehle oder einen Mann finden.

Einige Anleitungen empfehlen die Verwendung der %TIMES-Variablen, sind sich aber nicht sicher, wie.

Antworten (3)

Ich habe es herausgefunden, ich musste ein bisschen lernen, Tasker zu benutzen, die Lösung ist ein wenig umständlich, aber es sollte wahrscheinlich so in Tasker gemacht werden.

Die wichtigste Variable für solche Datetime-Manipulationen in Tasker ist eine globale Variable %TIMES, die die aktuelle Uhrzeit in Sekunden enthält - also eine große lange Ganzzahl.

Das Hinzufügen von z. B. 30 Tagen bedeutet, dass Sie die Variable (mit aktivierter Mathematik) wie folgt festlegen müssen :

%TIMES + (30 * 86400)

Morgen ist:

%TIMES + (1 * 86400)

Das Hauptproblem besteht darin, dass Sie den Wert in einen formatierten datetime-String umwandeln müssen. So wie ich es verstanden habe, gibt es in Tasker keinen eingebauten Befehl dafür.

Sie müssen dafür einen JavaScriptlet-Aufgabenschritt erstellen und dort den Code von dieser Seite einfügen :

<TaskerData sr="" dvi="1" tv="4.1b1m">
    <Task sr="task54">
        <cdate>1340586441681</cdate>
        <edate>1369445351826</edate>
        <id>54</id>
        <nme>getFormattedDate</nme>
        <pri>10</pri>
        <rty>2</rty>
        <Action sr="act0" ve="3">
            <code>129</code>
            <Str sr="arg0" ve="3">var gsMonthNames = new Array(
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December'
);

var gsDayNames = new Array(
'Sunday',
'Monday',
'Tuesday',
'Wednesday',
'Thursday',
'Friday',
'Saturday'
);

var d = new Date(par[0] * 1000);
var f = par[1];

var formatteddate = f.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
    function($1)
    {
        switch ($1)
        {
        case 'yyyy': return d.getFullYear();
        case 'yy':   return ('0' + d.getFullYear()).slice(-2);
        case 'mmmm': return gsMonthNames[d.getMonth()];
        case 'mmm':  return gsMonthNames[d.getMonth()].slice(0,3);
        case 'mm':   return ('0' + (d.getMonth() + 1)).slice(-2);
        case 'dddd': return gsDayNames[d.getDay()];
        case 'ddd':  return gsDayNames[d.getDay()].slice(0,3);
        case 'dd':   return ('0' + d.getDate()).slice(-2);
        case 'hh':   return ('0' + ((h = d.getHours() % 12) ? h : 12)).slice(-2);
        case 'HH':   return ('0' + d.getHours()).slice(-2);
        case 'nn':   return ('0' + d.getMinutes()).slice(-2);
        case 'ss':   return ('0' + d.getSeconds()).slice(-2);
        case 'a/p':  return d.getHours() &lt; 12 ? 'a' : 'p';
        }
    }
);</Str>
            <Str sr="arg1" ve="3">45</Str>
            <Int sr="arg2" val="1"/>
            <Int sr="arg3" val="45"/>
        </Action>
        <Action sr="act1" ve="3">
            <code>126</code>
            <Str sr="arg0" ve="3">%formatteddate</Str>
            <Int sr="arg1" val="1"/>
        </Action>
    </Task>
</TaskerData>

Vor diesem Javascriptlet-Schritt fügen Sie 2 Schritte ein, in denen Sie zwei Eingabevariablen festlegen %par1(enthält Datumszeit in Sekunden aus dem vorherigen Schritt) und %par2(enthält yyyymmdd- Datumsformat).

Der formatierte Datumsstring steht dann in %formatteddateVariable zur Verfügung.


Was die nächste Woche betrifft:

  • Führen Sie Shell date -d +"%Y"to aus%year
  • Führen Sie Shell date -d +"%V"to aus%week
  • Variable setzen %weekauf %week + 1(Do Maths On)
  • Variable %yearauf %year + 1(Do Maths On) setzen (If %week > 52)
  • Variable setzen %weekauf 1(If %week > 52)
  • Die yyyyww.htmder nächsten Woche kann dann geschrieben werden als%year%week.htm
52*7 = 364; Ein normales Jahr hat 365 Tage und ein Schaltjahr hat 366 Tage. Aufgrund dieser Diskrepanz gibt es unabhängig davon, ob Woche 1 die erste volle Woche oder die erste Woche mit 4 Tagen oder mehr im neuen Jahr ist, gelegentlich eine Woche 53.

Wenn eine Variable %mytimestampauf einen Epochenzeitstempel gesetzt ist, können Sie dies in Ihrer Shell-Aktion verwenden:

date -d @%mytimestamp +%Y%m%d

Beachten Sie das @Vorher%mytimestamp


$ adb shell
$ date --version
toybox 0.7.4-android
$ date --help
usage: date [-u] [-r FILE] [-d DATE] [+DISPLAY_FORMAT] [-D SET_FORMAT] [SET]


Set/get the current date/time. With no SET shows the current date.

Default SET format is "MMDDhhmm[[CC]YY][.ss]", that's (2 digits each)
month, day, hour (0-23), and minute. Optionally century, year, and second.
Also accepts "@UNIXTIME[.FRACTION]" as seconds since midnight Jan 1 1970.

-d      Show DATE instead of current time (convert date format)
-D      +FORMAT for SET or -d (instead of MMDDhhmm[[CC]YY][.ss])
-r      Use modification time of FILE instead of current date
-u      Use UTC instead of current timezone

+FORMAT specifies display format string using strftime(3) syntax:

%% literal %             %n newline              %t tab
%S seconds (00-60)       %M minute (00-59)       %m month (01-12)
%H hour (0-23)           %I hour (01-12)         %p AM/PM
%y short year (00-99)    %Y year                 %C century
%a short weekday name    %A weekday name         %u day of week (1-7, 1=mon)
%b short month name      %B month name           %Z timezone name
%j day of year (001-366) %d day of month (01-31) %e day of month ( 1-31)
%N nanosec (output only)

%U Week of year (0-53 start sunday)   %W Week of year (0-53 start monday)
%V Week of year (1-53 start monday, week < 4 days not part of this year)

%D = "%m/%d/%y"    %r = "%I : %M : %S %p"   %T = "%H:%M:%S"   %h = "%b"
%x locale date     %X locale time           %c locale date/time

Versuche dies:

morgen=$(( date +%s+ 86400 ))

Datum -d @$morgen +%Y%m%d

Geben Sie hier die Bildbeschreibung ein