Skip to content

Instantly share code, notes, and snippets.

@jojosati
Last active September 9, 2023 04:13
Show Gist options
  • Save jojosati/37de010d3ad03eeee319f1aea2c55667 to your computer and use it in GitHub Desktop.
Save jojosati/37de010d3ad03eeee319f1aea2c55667 to your computer and use it in GitHub Desktop.
Test $now - Thai/Eng date expression translator
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>$now expression</title>
<meta name="description" content="ทดสอบชุดคำสั่งเกี่ยวกับวันที่ และช่วงเวลา">
<meta property="og:description" content="ทดสอบชุดคำสั่งเกี่ยวกับวันที่ และช่วงเวลา">
<meta property="og:title" content="$now expression">
<meta property="og:image" content="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAABILAAASCwAAEAAAABAAAAAhISEAMDAwAD8/PwBNTU0AXFxcAHp6egCXl5cApqamAMTExADT09MA8PDwAP///wAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMu7u8u7u7zMywB7y5AEvMzLAHu7MAS8zMsAe7YABLzMywB7oQAEvMzLAHtQAgS8zMsAeABkBLzMywByArQEvMzLACAItAS8zMsAAFu0BLzMywABq7QEvMzLAAe7tAS8zMsAS7y0BLzMy7u7zLu7vMzMzMzMzMzMz//wAAwQMAAMEDAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwIMAAMGDAAD//wAA">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link href="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAABILAAASCwAAEAAAABAAAAAhISEAMDAwAD8/PwBNTU0AXFxcAHp6egCXl5cApqamAMTExADT09MA8PDwAP///wAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMu7u8u7u7zMywB7y5AEvMzLAHu7MAS8zMsAe7YABLzMywB7oQAEvMzLAHtQAgS8zMsAeABkBLzMywByArQEvMzLACAItAS8zMsAAFu0BLzMywABq7QEvMzLAAe7tAS8zMsAS7y0BLzMy7u7zLu7vMzMzMzMzMzMz//wAAwQMAAMEDAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwIMAAMGDAAD//wAA" rel="icon" type="image/x-icon">
</head>
<body ng-app>
<div class="container" ng-controller="nowCtrl">
<h2><img style="height:40px" src="data:image/x-icon;base64,AAABAAEAEBAQAAEABAAoAQAAFgAAACgAAAAQAAAAIAAAAAEABAAAAAAAgAAAABILAAASCwAAEAAAABAAAAAhISEAMDAwAD8/PwBNTU0AXFxcAHp6egCXl5cApqamAMTExADT09MA8PDwAP///wAAAAAAAAAAAAAAAAAAAAAAzMzMzMzMzMzMu7u8u7u7zMywB7y5AEvMzLAHu7MAS8zMsAe7YABLzMywB7oQAEvMzLAHtQAgS8zMsAeABkBLzMywByArQEvMzLACAItAS8zMsAAFu0BLzMywABq7QEvMzLAAe7tAS8zMsAS7y0BLzMy7u7zLu7vMzMzMzMzMzMz//wAAwQMAAMEDAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADAADAAwAAwIMAAMGDAAD//wAA">
$now expression</h2>
<div ng-show="expr.indexOf('$') >= 0">
<span ng-repeat="kw in keywords()">
<button class="btn btn-sm btn-default" ng-click="append(kw)">
{{ kw }}
</button>
</span>
</div>
<div class="row">
<div class="col-xs-12 col-md-10">
<div class="form-group has-feedback">
<label>expression</label>
<input class="form-control" type="text" ng-model="expr"/>
<span class="glyphicon glyphicon-remove form-control-feedback" ng-click="expr=''"></span>
</div>
<pre ng-hide="!translated || translated == expr"> => {{ translated }}</pre>
<pre class="bg-warning">{{ evaluate(translated) }}</pre>
<div class="well">
<h4>keywords summary</h4>
<div class="row form-group">
<div class="col-md-2" ng-repeat="kw in 'At:,$at(Date?),$today(),$yesterday(),$tomorrow()'.split(',')">
<span ng-class="$index && 'text-info'">{{ kw }}</span>
</div>
</div>
<div class="row form-group">
<div class="col-md-2" ng-repeat="kw in 'method:,.period(interval?)'.split(',')">
<span ng-class="$index && 'text-info '">{{ kw }}</span>
</div>
</div>
<div class="row form-group">
<div class="col-md-2" ng-repeat="kw in 'Period:,$this(interval?),$last(interval?),$next(interval?),$since(at?),$until(at?)'.split(',')">
<span ng-class="$index && 'text-warning '">{{ kw }}</span>
</div>
</div>
<div class="row form-group">
<div class="col-md-2" ng-repeat="kw in 'method:,.from(at?),.till(at?),.begin(),.end()'.split(',')">
<span ng-class="$index && 'text-warning'">{{ kw }}</span>
</div>
</div>
<div class="row form-group">
<div class="col-md-2" ng-repeat="kw in 'interval:,day,week,month,quarter,year'.split(',')">
<span ng-class="$index && 'text-danger'">{{ kw }}</span>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js"></script>
<script src="now.js"></script>
<script>
function nowCtrl($scope) {
$scope.keywords = function () {
if (!$scope.expr || $scope.expr.match(/\(\s*$/)) {
return ['$today()', '$yesterday()', '$tomorrow()', '$at( 31, 8, 2010 )',
'$this', '$next', '$last', '$since( ', '$until( ', ' )']
}
if ($scope.expr.match(/(begin|end)\(\)$/)) {
return ['.period', ' )']
}
if ($scope.expr.match(/(\$(since|until|this|next|last)|\.period)\(.*\)$/))
return ['.begin()', '.end()', '.from( ', '.till( ', ' )']
if ($scope.expr.match(/\)$/)) {
return ['.period', ' )']
}
if ($scope.expr.match(/(\$(this|next|last)|\.period)$/)) {
return ['( year )', '(quarter)', '( month )', '( week )', '( day )' ]
}
return ['( ' ]
}
$scope.expr = "$today()"
$scope.append = function(kw) {
$scope.expr += kw
}
$scope.$watch('expr', function (nval){
$scope.translated = $now.translator.executer('th')(nval)
})
$scope.evaluate = function (expr) {
if (expr) {
try {
var answer = $now(expr)
if (angular.isFunction(answer))
answer = 'method '
return ' => ' + answer.toString()
}
catch (e) { return '** ' + e.message }
}
return expr
}
}
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment