Cómo obtener la fecha de mañana y el número de la próxima semana para usar en Tasker

Según esta respuesta, estoy buscando una manera de obtener la fecha de mañana y el número de la próxima semana para usar en la aplicación Tasker , Run Shell Command .

Yo he tratado:

date -d '+1 day' +"%Y%m%d"y similares, pero todavía estoy recibiendo Error: 1.

En el emulador de shell obtengobad date '+1 day'

No se puede encontrar ninguna referencia de comandos de shell de Android o man.

Algunas guías recomiendan usar la variable %TIMES, pero no estoy seguro de cómo hacerlo.

Respuestas (3)

Lo descubrí, tuve que aprender a usar Tasker un poco, la solución es un poco incómoda, pero probablemente debería hacerse de esta manera en Tasker.

La variable más importante para tales manipulaciones de fecha y hora en Tasker es una variable global %TIMESque contiene la hora actual en segundos, por lo que es un número entero grande y largo.

Agregar, por ejemplo, 30 días significa que necesita establecer una variable (con matemáticas activadas) de esta manera:

%TIMES + (30 * 86400)

mañana es:

%TIMES + (1 * 86400)

El problema principal es que debe convertir el valor en una cadena de fecha y hora formateada. Tal como lo entendí, no hay un comando integrado para eso en Tasker.

Debe crear un paso de tarea de JavaScriptlet para eso y pegar allí el código de esta página :

<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>

antes de ese paso de Javascriptlet, inserta 2 pasos donde establece dos variables de entrada %par1(contiene fecha y hora en segundos del paso anterior) y %par2(contiene yyyymmdd- formato de fecha).

La cadena de fecha formateada está disponible entonces en %formatteddatevariable.


En cuanto a recibir la próxima semana:

  • Ejecutar Shell date -d +"%Y"para%year
  • Ejecutar Shell date -d +"%V"para%week
  • Establecer variable %weeken %week + 1(Hacer matemáticas en)
  • Establezca la variable %yearen %year + 1(Hacer matemáticas en) (Si %week > 52)
  • Establecer variable %weeken 1(si %week > 52)
  • El yyyyww.htmde la próxima semana se puede escribir como%year%week.htm
52*7 = 364; un año normal tiene 365 días y un año bisiesto tiene 366 días. Debido a esta discrepancia, independientemente de si la semana 1 se toma como la primera semana completa o la primera semana con 4 días o más en el nuevo año, ocasionalmente habrá una semana 53.

Dada una variable %mytimestampestablecida en una marca de tiempo de época, puede usar esto en su acción de shell:

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

Tenga en cuenta el @antes%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

prueba esto:

mañana=$(( date +%s+ 86400 ))

fecha -d @$mañana +%Y%m%d

ingrese la descripción de la imagen aquí