Regular Expression date time using MVC Data Annotations - angularjs

I'm mixing MVC Data Annotations and AngularJs validations ng-pattern.
What I've done so far is this thing:
[RegularExpression("/^[0-9]{4}-[0-9]{2}-[0-9]{2} 20|21|22|23|([0-1][0-9]):[0-5][0-9]:[0-5][0-9]$/", ErrorMessage = "Date format: yyyy-mm-dd hh:mm:ss")]
As you can see, I try to format date: yyyy-mm-dd hh:mm:ss.
I want to make it 24 hours time.
My problem is that form is getting valid when I type:
2015-21 , 2015-22 // 2015-20 is not valid, cannot understand why
2015-12-20 21 // I want user to enter minutes and seconds, because it also has datetimepicker, which is more useful and it sets format as I want
So, why my regular expression is not working as I expect?

Your regex does not work as expected because you did not use a ^ anchor (although I guess this expression is anchored, but still it is better to play it safe) and you did not enclose the alternatives into a group, and thus 21, 22, 23 are valid values.
Here is a fixed expression:
^[0-9]{4}-[0-9]{2}-[0-9]{2} (?:20|21|22|23|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$
^^^ ^^
See demo

change your regex instead to be like this
^[0-9]{4}-[0-9]{2}-[0-9]{2} ((20|21|22|23)|([0-1][0-9])):[0-5][0-9]:[0-5][0-9]$
check this Demo
I only changed 20|21|22|23|([0-1][0-9]) in your regex to ((20|21|22|23)|([0-1][0-9]))

Related

SSRS Expression Conversion to UTC

I have tried my best to convert one textbox to UTC using the SSRS expression. It is not converting it. Is there any settings to configure before this code can work ? i used these two code below. Nothing works!
=TimezoneInfo.ConvertTimetoUtc(CDate(Fields!Starttime.Value))
=DateTime.SpecifyKind(Fields!Starttime.Value, DateTimeKind.UTC)
Use the expression below
=Fields!Starttime.Value.ToUniversalTime()
Design & Result with sample data

AngularJS convert string date and integer time

I have a string with a full date like this: "2016/03/05 13:47:18 +0000".
I want covert it to "2016-03-05" or "05-March-2016" on Angular scope. I also have integer time duration = 421471 which I want to convert to a time format like "23:45" or "1 hour , 50 minute".
{{sound.created_at | date}}
{{sound.duration}}
How can I do that?
To solve your issue please use momentjs as very famous lib to deal everything about date in js.
To make it work well with Angularjs/4, please have a look here.

ng-pattern to validate dd/mm/yy format date in angularjs

i have a date picker which accepts date in dd/mm/yy format can someone please say what is the regular expression should be place in ng-pattern to match the same
date will contain only / no other special character
example:12/12/2015
regex for that would be
ng-pattern="/\d\d/\d\d/\d\d\d\d/"
The regex will be
/^(((0[1-9]|[12]\d|3[01])-(0[13578]|1[02])-((19|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)-(0[13456789]|1[012])-((19|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])-02-((19|[2-9]\d)\d{2}))|(29-02-((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/
This is valid for leap years as well. To use this in your application, you can either use it inline with ng-pattern or use it as
$scope.pattern = new RegExp(PatternAsString);
<input ng-model="foo" ng-pattern="pattern">
Use below pattern. It only validates date format "yyyy/MM/dd".
ng-pattern = ^[0-9]{4}[\/][0-9]{2}[\/][0-9]{2}$
The regex is
ng-pattern="/^(31[ \/ ](0[13578]|1[02])[ \/ ](18|19|20)[0-9]{2})|((29|30)[\/](01|0[3-9]|1[1-2])[\/](18|19|20)[0-9]{2})|((0[1-9]|1[0-9]|2[0-8])[\/](0[1-9]|1[0-2])[\/](18|19|20)[0-9]{2})|(29[\/](02)[\/](((18|19|20)(04|08|[2468][048]|[13579][26]))|2000))$/"
This will take care of Leap year as well.
Format is DD/MM/YYYY
This pattern is correct and working fine.
ng-pattern="/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/[0-9]{4}$/"
#ivarni
your condition won't work for 29/oct or 30/oct
your month validation need minor rectification.
What we have: (01|0[3-9]|1[1-2])
Corrected : (01|0[3-9]|1[0-2])

CakePHP: CakeTime i18nFormat for date and time

I'm using the CakeTime class for my localization of dates & times.
For dates it works like I want it to:
$timestring = $this->Time->format('Y-m-d H:i:s', time());
echo 'DateTime: '.$this->Time->i18nFormat($timestring);
// Result => DateTime: 11/08/2013
I want it to also display the time.
For example in the US they use AM/PM and in other places they use the 24 hour notation.
I've looked but can't seem to find a way to do this.
Any idea's?
Edit*
To be clear, the localization works perfectly for the dates(have the LC_TIME files), but the i18nFormat function only returns the date, and from what i saw, passing a format will use that format, not the localized one, example MM/DD/YYYY vs DD.MM.YYYY in a different locale
*Edit2:
The solution vicocamacho gave in the comments is the correct one
So to get the Date + Time in the localized form:
$this->Time->i18nFormat(time(), '%x %X') does the trick!
You can use the TimeHelper::i18nFormat method. You also can check this repo to find common date/time translations https://github.com/cakephp/localized be sure to store them in the APP/locale/<locale>/LC_TIMEdirectory

While user manual inputs date into text input, how do I format the date to add slashes and put the input at the end (e.g. 08/21/2013)?

While the user inputs numeric values for a date input, what would be the best approach to add in slashes? E.g. user inputs
0
08
*code fires to add in slash*
08/
08/2
08/21
*code fires to add in slash
08/21/2
08/21/20
08/21/201
08/21/2013
a regex on the input ng-model, being watched, and modified by the $watch callback
Consider using standard HTML5 form element for data input: input[type="date"] it has built-in support for delimiters. And it's more browser-friendly.
I've created a simple directive to enable it to work correctly with AngularJS ~1.2.16.
Please look here for details:
https://github.com/betsol/angular-input-date
And here's the demo:
http://jsfiddle.net/F2LcY/1/
Hope it helps!

Resources