Тема: WSC: Script Component для форматирования данных (дата, время, сумма)
Приветствую жителей форума. На днях пришлось поковыряться с форматированием данных. Соглашусь, что тема изъезжена вдоль и поперёк. И уже давно существуют готовые инструменты. К примеру для JS существует date.js. Конечно можно было бы этим ограничиться, но в процессе поиска я наткнулся на страничку, которая меня заинтересовала http://www.tek-tips.com/viewthread.cfm?qid=1570966.
В первом посте предлагалось использовать возможности функций XSL, а во втором использовался объект MSSTDFMT.StdDataFormat. К сожалению, со вторым есть сложность в том, что он 32-битный и на 64-рядной машине нужно либо добавлять его в службу компонентов, дабы OLE сервер обеспечил связь с ним в 64-битном интерпретаторе либо запускать скрипт под 32-битной версией интерпретатора.
Поэтому я решил поизучать первый вариант с XSL. В результате собрал компонент с функциями:
formatDateTime - форматирования даты и времени (включает в себя поочерёдный вызов formatTime и formatDate)
formatDate - форматирования только даты
formatTime - форматирования времени
formatNumber - форматирование числа
Эти функции являются "обёртками" над функциями xsl процессора. Маски этих функций можно посмотреть здесь:
format-date https://msdn.microsoft.com/en-us/librar … .110).aspx
format-time https://msdn.microsoft.com/ru-ru/librar … .120).aspx
format-number https://msdn.microsoft.com/ru-ru/librar … .120).aspx
Пример вызова на JavaScript
with (GetObject("script:file:xslFormatter.wsc")){
WScript.Echo(formatDateTime(new Date(),[
"Дата:\t\t\t dd.MM.yyyy",
"Короткая дата:\t\t dd.MM.yy",
"Дата для SQL:\t\t yyyyMMdd",
"День:\t\t\t dddd",
"Месяц:\t\t\t MMMM",
"Эра:\t\t\t gg",
"Время:\t\t\t HH:mm:ss",
"дата и время для SQL:\t yyyy-MM-ddTHH:mm:ss"
].join("\r\n")))
}
Результат выполнения
Дата: 07.02.2017
Короткая дата: 07.02.17
Дата для SQL: 20170207
День: вторник
Месяц: Февраль
Эра: наша эра
Время: 14:07:19
дата и время для SQL: 2017-02-07T14:07:19
P.S Так как знания XSL у меня никудышные, то наверняка можно улучшить и упростить код. Если кто-то заинтересуется, то буду благодарен за участие.
UPD 07.02.2017
Добавил поддержку локализации для функций форматирования даты и времени.
WScript.Echo(GetObject("script:file:xslFormatter.wsc").formatDateTime(new Date(),"Сегодня dddd","lt"))