+2

Tijd en andere zaken weergeven in statusbalk

Theo Derks - NL (distributor) 13 jaar geleden in Tips en Trucs bijgewerkt door S W. 1 jaar geleden 5
Het is mogelijk om de tijd (en andere zaken zoals batterij-status) weer te geven op de client (iPad, iPhone):
Reserveer voor de iPad een balk van 20 pixels hoog (dus maak je project 20 pixels MINDER hoog), en geef in de Transfer in Properties aan dat je de statusbalk wilt weergeven. Voor de iPhone moet je rekening houden met een balk van 40 pixels hoog.
Theo.

Bewerkt 22-06-2014: Het betrof hier versie 1.5; het bovenstaande is dus niet meer van toepassing voor de huidige versie 2.1. In deze versie kun je elke gewenste afbeelding in je project gebruiken voor de weergave van batterij, tijd, datum etc.
Het is ook mogelijk om de tijd/datum/enz… te tonen in de applicatie zelf :

Hier gaan we :

1) Teken een Item op je Pagina
2) In het 'Project Device Panel' open je : 'System Tokens'
3) Je ziet daar de items 'Time' en 'Date' … klap die open en kies je gewenste formaat…
4) Sleep dit naar het Item dat je zonet hebt getekend
5) Kies 'In Text' na het loslaten van de muisknop

6) Klaar !!!

De items worden automatisch geupdated…

P.S.
Je kan voor de tijd ook bijvoorbeeld drie items maken (uur, minuten, seconden) en dan de overeenkomstige
drie formaten (Hour, Minutes, Seconds) ernaartoe slepen…
Je zal zien dat de app de seconden netjes doorgeeft.
Eén opmerking : bij waarden kleiner dan 10 wordt geen '0' vóór het cijfer gezet…


Dag Wim,
Je hebt gelijk; zo eenvoudig is het!
Maar…… standaard wordt de Engelstalige datum-notatie gebruikt (27/12/2012 of 12/27/2012)
Wil je dat voorkomen, dan moet je middels een stukje JavaScript de datum omzetten naar een Nederlandse datum-notatie (27-12-2012).
Ik zal hiervan op een later tijdstip een voorbeeldje plaatsen in dit Forum.
Theo
Wel Theo, in België gebruiken we ook de '/' als scheidingsteken, in Nederland gebruiken jullie blijkbaar '-'.

Dus voor de Belgen onder ons geen Javascript nodig voor dit, maar het kan inderdaad wel


Hier de code om een tijd en een datum in (bijna) elk gewenst formaat weer te geven…
Dus ook het Nederlandse formaat Theo ;-)
Alles is netjes gedocumenteerd, zodat je de tijd en datumfuncties ook kan gebruiken
voor andere doeleinden…

Geef je geen extra parameters dan wordt de huidige tijd/datum genomen.
Als je een klok wilt tonen, neem dan wel best een lettertype met vaste proporties (zoals Courier New)
anders zal je klok smaller en breder worden naargelang de cijfers die gebruikt worden.

(Sorry voor deze zeer lange reply)

================================================================
1) Maak eerst een JavaScript met als naam bijvoorbeeld InitAtStartup en plaats hierin 4 functies :
=====================================================================

IR.AddListener(IR.EVENT_START, 0, function()
{
  IR.SetInterval(100, ToonHuidigeDatum); // om de 1/10e seconde uitvoeren 
//  IR.SetInterval(100, ToonHuidigeTijd); // om de 1/10e seconde uitvoeren  (als je geen honderdsten seconden hoeft)
})

IR.AddListener(IR.EVENT_WORK, 0, function()
{
  ToonHuidigeTijd(); // continue uitvoeren; (als je honderdsten seconden wilt)
})

function ToonHuidigeDatum()
{
  // gewenste datumnotatie hier opgeven
  var datumvandaag = Datum("%d-%mm-%jjjj");    // wordt bv 1-01-2013
  // var datumvandaag = Datum("%Dddd %d %mmmm %jjjj"); // wordt bv Dinsdag 1 januari 2013
  IR.GetItem("Pagina").GetItem("ItemvoorDatum").GetState(0).Text = datumvandaag;
}

function ToonHuidigeTijd()
{
  // gewenste tijdnotatie hier opgeven
  var tijd = Tijd("%u:%mm:%ss.%hh");
  IR.GetItem("Pagina").GetItem("ItemvoorTijd").GetState(0).Text = tijd;
}

================================================================
2) Maak dan een JavaScript met als naam bijvoorbeeld Datum en plaats hierin deze functies :
==================================================================

function Datum(formaat,dag,maand,jaar) {
/* Zet datum om in gewenst formaat, indien geen datum opgegeven wordt de huidige datum genomen
 
Voorbeelden :
————-

      Datum("%Dddd %d %mmmm %jjjj")            Dinsdag 1 januari 2013  (als huidige datum 01/01/2013)
      Datum("%dddd %d %mmmm",31,12,2012)        Maandag 31 december
      Datum("%Dddd %dd-%mm-%jj")                Dinsdag 01-01-13        (als huidige datum 01/01/2013)
      Datum("%dd/%mm/%jj")                      01/01/13                (als huidige datum 01/01/2013)
      Datum("%Mmmm '%jj",1,11)                  November '13            (als huidig jaar 2013)

Parameters :
————
 
  formaat    string met het gewenste formaat  vb) "%0d/%0m/%jjjj"
 
             
      %dddd    weekdag in kleine letters        maandag, dinsdag, … zondag
      %Dddd    weekdag met beginhoofdletter    Maandag, Dinsdag, … Zondag     
      %DDDD    weekdag in hoofdletters          MAANDAG, DINSDAG, … ZONDAG

      %d      dag                              1, 2, … 31
      %dd      dag met 2 cijfers                01, 02, … 31
     
      %mm      maand                            1, 2, … 12
      %m      maand met 2 cijfers              01, 02, … 12
      %mmmm    maand in kleine letters          januari, februari, … december 
      %Mmmm    maand met beginhoofdletter      Januari, Februari, … December 
      %MMMM    maand in hoofdletters            JANUARI, FEBRUARI, … DECEMBER
     
      %j      jaartal                          1, … 13, …
      %jj      jaartal met 2 cijfers            01, … 13, …
      %jjjj    jaartal met 4 cijfers            2001, … 2013, …

  dag, maand, jaar
             
      indien geen jaar opgegeven, wordt het huidige jaar verondersteld
      indien ook geen maand opgegeven, wordt de huidige maand en het huidige jaar verondersteld
      indien ook geen dag opgegeven, wordt de huidige datum (vandaag) verondersteld
*/       
 
  // Weekdag bepalen en huidige datum ophalen indien geen datum opgegeven
 
  var weekdagnr = -1;
  if (dag===undefined) { 
      var dag = IR.GetVariable("System.Date.Day");
      weekdagnr = IR.GetVariable("System.Date.DayOfWeek");
  }
 
  if (maand===undefined) var maand = IR.GetVariable("System.Date.Month");
  if (jaar===undefined) var jaar = IR.GetVariable("System.Date.Year");
 
  if (weekdagnr == -1) {
      var d = new Date(jaar,maand-1,dag); //Maandnummering vanaf 0 in JavaScript !!!
      weekdagnr = d.getDay();
      delete d;   
  }
 
  // kopieer formaat karakter voor karakter naar returnvalue en vervang %-codes door hun respectievelijke waarden
 
  var returnvalue="";

  var param, paramLC;
  var letter;
 
  var dagvdweekStr, maandStr;
 
  var pos=0;
  while (pos<formaat.length) {
      letter = formaat.charAt(pos);
      if (letter!='%') {
        returnvalue += letter;
        pos++;
        continue;     
      }
      //letter == '%' –> code vervangen
      param = formaat.substr(pos+1,4);
      paramLC = param.toLowerCase();
       
      if (paramLC == "dddd") {
        dagvdweekStr=WeekDag(weekdagnr);
        if (param == "DDDD")
            dagvdweekStr = dagvdweekStr.toUpperCase();
        else if (param == "Dddd")
            dagvdweekStr = dagvdweekStr.charAt(0).toUpperCase() + dagvdweekStr.substring(1);
        returnvalue += dagvdweekStr;
        pos += 5;
        continue;       
      }
       
      if (paramLC == "mmmm") {
        maandStr = Maand(maand);
        if (param == "MMMM")
            maandStr = maandStr.toUpperCase();
        else if (param.charAt(0)=='M')
            maandStr = maandStr.charAt(0).toUpperCase() + maandStr.substring(1);
        returnvalue += maandStr;
        pos += 5;
        continue;       
      }
       
      if (paramLC == "jjjj") {
        returnvalue += jaar;
        pos += 5;
        continue;       
      }
     
      param = formaat.substr(pos+1,2);
       
      if (param=="dd") {
        if (dag<10) returnvalue += "0";
        returnvalue += dag;
        pos += 3;
        continue;
      }     
       
      if (param=="mm") {
        if (maand<10) returnvalue += "0";
        returnvalue += maand;
        pos += 3;
        continue;
      }     
       
      if (param=="jj") {
        if (jaar % 100 <10) returnvalue += "0";
        returnvalue += jaar % 100;
        pos += 3;
        continue;
      }         
       
      param = formaat.substr(pos+1,1);
       
      if (param=="d") {
        returnvalue += dag;
        pos += 2;
        continue;
      }     
     
      if (param=="m") {       
        returnvalue += maand;
        pos += 2;
        continue;
      }     

      if (param=="j") {
        returnvalue += jaar % 100;
        pos += 2;
        continue;
      }

      //'%' was geen parameter,
      returnvalue += letter;
      pos++;
  } // endwhile
  return returnvalue;
}


function WeekDag(weekdagnr)
{
  var returnvalue;
  switch (weekdagnr)
  {
      case 0 : returnvalue="zondag"; break;    // 0 = ZONDAG in JavaScript !!!
      case 1 : returnvalue="maandag"; break;
      case 2 : returnvalue="dinsdag"; break;
      case 3 : returnvalue="woensdag"; break;
      case 4 : returnvalue="donderdag"; break;
      case 5 : returnvalue="vrijdag"; break;
      case 6 : returnvalue="zaterdag"; break;
      case 7 : returnvalue="zondag"; break;    // 7 = ZONDAG voor ons
      default : returnvalue="???dag???"; break;         
  }
  return returnvalue;
}

function Maand(maandnr)
{
  var returnvalue;
  switch (maandnr)
  {
      case 1 : returnvalue = "januari"; break;
      case 2 : returnvalue = "februari"; break;
      case 3 : returnvalue = "maart"; break;
      case 4 : returnvalue = "april"; break;
      case 5 : returnvalue = "mei"; break;
      case 6 : returnvalue = "juni"; break;
      case 7 : returnvalue = "juli"; break;
      case 8 : returnvalue = "augustus"; break;
      case 9 : returnvalue = "september"; break;
      case 10: returnvalue = "oktober"; break;
      case 11: returnvalue = "november"; break;
      case 12: returnvalue = "december"; break;
      default : returnvalue = "???maand???"; break;
  }
  return returnvalue;
}

================================================================
3) Maak dan een JavaScript met als naam bijvoorbeeld Tijd en plaats hierin deze functies :
================================================================

function Tijd(formaat,uur,min,sec,hon) {
/* Zet tijd om in gewenst formaat, indien geen tijd opgegeven wordt de huidige tijd genomen
 
Voorbeelden :
————-

      Tijd("%uu:%mm:%ss.%hh")                  00:00:00.00            (als huidige tijd 00:00:00)
      Tijd("%uu:%mm:%ss.%hh",12)                12:00:00.00
      Tijd("%uu:%mm:%ss.%hh",12,45,59,15)      12:45:59.15
      Tijd("%u:%mm:%ss")                        0:00:00                (als huidige tijd 00:00:00)
                                                12:00:00                (als huidige tijd 12:00:00)
                                                23:59:00                (als huidige tijd 23:59:00)
      Tijd("%UU:%mm:%ss%AP")                    12:00:00AM              (als huidige tijd 00:00:00)
      Tijd("%U:%mm%ap")                        12:00am                (als huidige tijd 00:00:00)
                                                11:59am                (als huidige tijd 11:59:00)
                                                12:00pm                (als huidige tijd 12:00:00)
                                                11:59pm                (als huidige tijd 23:59:00)

Parameters :
————
 
  formaat    string met het gewenste formaat  vb) "%0d/%0m/%jjjj"
 
      %u      uur (24u-notatie)                0, 1, … 23
      %uu      uur (24u-notatie) met 2 cijfers  00, 01, … 23 
 
      %U      uur (12u-notatie)                1, 2, … 12            0 uur wordt 12 uur in 12u-notatie !
      %UU      uur (12u-notatie) met 2 cijfers  01, 02 … 12
      %ap      am/pm                            am, pm
      %AP      AM/PM                            AM, PM
 
      %m      minuten                          0, 1, … 59
      %mm      minuten met 2 cijfers            00, 01, … 59
 
      %s      seconden                        0, 1, … 59
      %ss      seconden met 2 cijfers          00, 01, … 59

      %h      honderdsten                      0, 1, … 99
      %hh      honderdsten met 2 cijfers        00, 01, … 59
             
  uur, min, sec, hon
             
      indien geen uur opgegeven, wordt het huidige uur verondersteld
      indien ook geen min opgegeven, wordt de huidige minuut en het huidige uur verondersteld
      indien ook geen sec opgegeven, wordt de huidige tijd (nu) verondersteld
*/ 

  if (uur===undefined)
  {
    var uur = IR.GetVariable("System.Time.Hour");
    var min = IR.GetVariable("System.Time.Minutes");
    var sec = IR.GetVariable("System.Time.Seconds");
    var d = new Date();
    var hon = Math.floor(d.getMilliseconds()/10);
    delete d;
  }
  else
  {
    if (min===undefined) var min = 0;
    if (sec===undefined) var sec = 0;
    if (hon===undefined) var hon = 0;
  }
   
  // kopieer formaat karakter voor karakter naar returnvalue en vervang %-codes door hun respectievelijke waarden
 
  var returnvalue="";

  var param, paramLC;
  var letter;
  var pm = (uur>=12);
 
  var pos=0;
  while (pos<formaat.length) {
      letter = formaat.charAt(pos);
      if (letter!='%') {
        returnvalue += letter;
        pos++;
        continue;     
      }
      //letter == '%' –> code vervangen
      param = formaat.substr(pos+1,2);
      paramLC = param.toLowerCase();
       
      if (paramLC=="uu") {
        if (param=="UU")
        {
            uur %= 12;
            if (!uur) uur+=12; //0 uur bestaat niet in 12 uursnotatie !!!
        }
        if (uur<10) returnvalue += "0";
        returnvalue += uur;
        pos += 3;
        continue;
      }     
       
      if (paramLC=="ap") {
        if (param=="AP")
            returnvalue+=(pm?"PM":"AM");
        else
            returnvalue+=(pm?"pm":"am");       
        pos += 3;
        continue;
      }         

      if (param=="mm") {
        if (min<10) returnvalue += "0";
        returnvalue += min;
        pos += 3;
        continue;
      }     
       
      if (param=="ss") {
        if (sec<10) returnvalue += "0";
        returnvalue += sec;
        pos += 3;
        continue;
      }         
     
      if (param=="hh") {
        if (hon<10) returnvalue += "0";
        returnvalue += hon;
        pos += 3;
        continue;
      }         

      param = formaat.substr(pos+1,1);
      paramLC = param.toLowerCase();
     
      if (paramLC=="u") {
        if (param=="U")
        {
            uur %= 12;
            if (!uur) uur+=12; //0 uur bestaat niet in 12 uursnotatie !!!
        }
        returnvalue += uur;
        pos += 2;
        continue;
      }     

      if (param=="m") {
        returnvalue += min;
        pos += 2;
        continue;
      }     
       
      if (param=="s") {
        returnvalue += sec;
        pos += 2;
        continue;
      }         

      if (param=="h") {
        returnvalue += hon;
        pos += 2;
        continue;
      }         

      //'%' was geen parameter,
      returnvalue += letter;
      pos++;
  } // endwhile
  return returnvalue;
}

================================================================

Dat is alles… Je hoeft dus enkel in ToonTijd en ToonDatum het formaat naar eigen wens aan te passen,


mvg

Wim

Ik ben erachter gekomen dat deze code erg traag is als je deze bijv in een loop gebruikt. Het is beter om de standaard tokens e gebruiken;
https://dev.iridi.com/Tokens_API/en

Bijv dus 
mysqldatumformaat = IR.GetVariable("System.Date.YYYY_MM_DD") + ' ' + IR.GetVariable("System.Time.24") +':'+ IR.GetVariable("System.Time.Seconds");