When programming anything with time in Microsoft PowerApps, there seems to be no easy way to create a time field, that is able to input and validate time.
I have crated a script, that validates and formats a standard input field as a time field. This is working with 24h time, but it should give you an idea so you can expand it to whatever you want.
Create a text field, called "TimeInput".
Add the variable tTxtOut as "default" and the script below to "onChange". Set "HintText" to "hh:mm"
You can use the global variables in other parts of your code:
err: boolean - set to true if something is wrong
tTimeError: string - contains an error text ("Invalid time!")
tTxtOut: string - contains the formattet time. Set the
Code:
// Set global variables Set(inp, TimeInput.Text); Set(th, "00"); Set(tm, "00"); Set(err, false); Set(tTimeError, ""); //Validate length If (Len(inp)>5, Set(err, true)); // Easy input without ":" If (Len(inp)=3, Set(inp, Left(inp,2)&":"&Right(inp,1)&"0")); If (Len(inp)=4, Set(inp, Left(inp,2)&":"&Right(inp,2))); // Validate hours // Check for invalid characters Set(th, First(Split(inp,":")).Result); Set(h, Value(th)); If (th<>Text(h) And th<>"0"&Text(h), Set(err, true)); // Check limits Set(th, Text(h)); If(h<0 Or h>23,Set(err, true)); If(h<10, Set(th, "0"&h)); // Validate minutes // Check for invalid characters Set(tm, Last(Split(inp,":")).Result); Set(m, Value(tm)); If (tm<>Text(m) And tm<>"0"&Text(m), Set(err, true)); If(Find(":", inp)>0,m=m,Set(m, 0)); // Check limits Set(tm, Text(m)); If(m<0 Or m>59, Set(err, true)); If(m<10, Set(tm, "0"&m)); // Do something If(err, Set(tTimeError, "Invalide time!");Set(tTxtOut,inp), Set(tTxtOut, th&":"&tm))