250 строк кода, распознающих дату на русском языке
http://habrahabr.ru/post/204628/
by chintsu
HTML
<body ng-app>
<div ng-controller="MainCtrl">
Введите текст даты:
<br/>
<input ng-model="data.myinput"/><br/>
<span>Распознано как:</span> <b>{{dt = jsParseDate(data.myinput); dt.title}}</b><br/>
<span>Дата:</span> <b>{{dt.date.toLocaleString()}}</b><br/>
<hr>
Кликните для проверки примеров:
<ol>
<li ng-repeat="example in data.examples" ng-click="data.myinput=example.title">{{example.title}}</a></li>
</ol>
</div
</body>
CSS
input {
width: 90%;
font-size: 20px;
padding: 5px 5px;
}
span {
display: inline-block;
width: 120px;
text-align: right;
color: #888;
}
span {
margin: 5px;
}
li {
cursor: pointer;
padding: 2px;
}
JavaScript
function MainCtrl($scope) {
$scope.data = {};
$scope.data.answer = "56";
$scope.data.myinput = "Напомнить про ДР жены через 10 дней в 11:30";
$scope.data.examples = [
{title: "Мыть машину через 2 дня в 11"},
{title: "Поздравить с ДР через год в 12:30"},
{title: "Записаться на пятницу"},
{title: "Проснуться 2 января"},
{title: "Через 50 лет купить котедж"},
{title: "Сегодня в 16 позвонить жене"},
{title: "Через пять дней в 14:00"},
{title: "Поздравить всех с НГ 31 декабря в 23"},
{title: "Получить письмо в 18"},
{title: "Послезавтра в 11 приехать за зарплатой"},
{title: "Сегодня в 21часов 30 минут выключить Дом2 "},
{title: "Купить браслет Jawbone Up через 2 дня в 20:00"},
{title: "Напомнить сделать рефакторинг в субботу"},
{title: "Перезагрузить сервер в воскресение в 2"}
]
//парсер даты (позвонить послезавтра)
$scope.jsParseDate = function(title) {
title = title.replace("одинадцать", "11").replace("двенадцать", "12").replace("тринадцать", "13").replace("четырнадцать", "14").replace("пятнадцать", "15").replace(" шестнадцать", " 16").replace(" семнадцать", " 17").replace(" двадцать", " 20").replace(" один", " 1").replace(" один", " 1").replace(" два", " 2").replace(" три", " 3").replace(" четыре", " 4").replace(" пять", " 5").replace(" шесть", " 6").replace(" семь", " 7").replace("восемь", "8").replace("девять", "9").replace("десять", "10").replace(" ноль", " 0");
if (title) title = title.toLowerCase();
var answer = "";
var did = false;
var mytime = "";
var mydate = new Date();
var newdate = new Date();
var d = new Object;
d.myhours = 0;
d.myminutes = 0;
d.mydays = 0;
d.mymonth = 0;
d.myyears = 0;
d.myweek = 0;
var shablon = /(\d{1,2}.\d{1,2}.\d{4})/g;
var matches = title.match(shablon);
if (matches)...