1 (изменено: Xameleon, 2017-02-21 12:57:40)

Тема: 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"))
Post's attachments

xslFormatter.wsc 3.45 kb, 16 downloads since 2017-02-21 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

2

Re: WSC: Script Component для форматирования данных (дата, время, сумма)

2Xameleon
Как всегда, круто! Буду пользоваться. Код самого Форматтера пока не разбирал, а демку предлагаю маленько переделать:

Date.prototype.format = function(sformat, locale) {return GetObject("script:file:xslFormatter.sct").formatDateTime(this, sformat, locale)};

var d = new Date();
WScript.Echo( d.format("Дата: dd.MM.yyyy mm:ss") );
WScript.Echo( d.format("Дата: dd.MM.yyyy") );
WScript.Echo( d.format("Короткая дата: dd.MM.yy") );
WScript.Echo( d.format("Дата для SQL: yyyyMMdd") );
WScript.Echo( d.format("День: dddd") );
WScript.Echo( d.format("Месяц: MMMM") );
WScript.Echo( d.format("Эра: gg") );
WScript.Echo( d.format("Время: HH:mm:ss") );
WScript.Echo( d.format("Дата и время для SQL: yyyy-MM-ddTHH:mm:ss") );
WScript.Echo( d.format("День недели по итальянски: dddd", "it") );

3

Re: WSC: Script Component для форматирования данных (дата, время, сумма)

mozers, пасиба ! ) Новую демку заценил. Согласен. Так лучше. )

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

4 (изменено: Xameleon, 2017-02-21 12:38:16)

Re: WSC: Script Component для форматирования данных (дата, время, сумма)

Проапдейтил компонент.
1) Окончательно пофиксил проблему с кавычками.
2) Изменил расширение на wsc
3) Изменил обработчик входящего параметра даты.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !