|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | Справочники
Главная arrow Программирование arrow Java arrow Манипуляции значениями даты и времени  

Манипуляции значениями даты и времени

Оглавление
Манипуляции значениями даты и времени
Страница 2
Страница 1 из 2

Здесь собраны все функции и методы объекта Date, которые обязательно пригодятся при работе со значениями даты и времени.

Хорошая идея!

Создайте файл сценариев datetimeutils.js и поместите в него объявления функций и методов, манипулирующих значениями даты и времени. Впоследствии, чтобы использовать какую-либо функцию или метод, достаточно будет просто подключить к Web-странице этот файл сценариев с помощью тега:

<SCRIPT SRC="datetimeutils.js"></SCRIPT>

Форматированный вывод значений даты и времени

Проблема

Очень часто бывает нужно вывести на Web-страницу дату в привычном нам формате "число.месяц.год" или время в виде "часьг.минутыхекунды". Стандартные же методы tostring и toLocalestring объекта Date возвращают длинную и не очень красивую строку вида "Fri Apr 28 11:29:04 UTC+0400 2006" или "28 апреля 2006 г. 11:29:44" соответственно.

Решение

Использование универсального метода toFormattedstring (листинг 1.21) объекта Date, реализующего форматированный вывод значений даты и времени в строковом формате. Вот формат его вызова:

<Дата>.toFormattedstring([<Формат даты>]);

Он принимает единственный необязательный параметр Формат даты, задающий... — правильно! — формат даты. Он представляет собой строку, содержащую литералы, задающие число, месяц, год, часы, минуты и секунды. Все доступные для использования литералы:

"DA" — число;

"YD" — номер дня недели;

  "YN" — название дня недели;

  "МО" — номер месяца;

  "MN" — название месяца;

  "YE" — год;

  "НО"—'часы;

  "Ml" — минуты;

  "SE" — секунды;

  "AM" — если присутствует, время выводится в 12-часовом формате, если отсутствует — в 24-часовом ("военном").

Если же формат не задан, будет использован формат по умолчанию "DA.MO.YE", т. е. "число.месяц.год".

Метод возвращает строку, содержащую отформатированное значение даты.

Внимание/

Листинг 1.21, содержащий исходный код метода toFormattedstring объекта Date, использует функцию jspsstringReplaceAll, чей исходный код содержится в листинге 1.11.

Листинг 1.21. Meтод toFormattedString объекта Date, возвращающий отформатированное значение даты

var JSPS_DAY_NAMES = new Array () ;

JSPS_DAY_NAMES[1]   =   "понедельник";

JSPS_DAYNAMES[2]   =   "вторник";

JSPS_DAY_NAMES[3]   =   "среда";

JSPS_DAY_NAMES[4]   =   "четверг";

JSPS_DAY_NAMES[5]   =   "пятница";

JSPS_DAY_NAMES[6]   =   "суббота";

JSPS_DAY_NAMES[7]   =   "воскресенье";

var JSPS_M0NTH_NAMES_2 = new Array(); JSPS_MONTH_NAMES_2[0] = "января"; JSPS_M0NTH_NAMES_2[1] = "февраля"; JSPS_MONTH_NAMES_2[2] = "марта"; JSPS_MONTH_NAMES_2[3] = "апреля"; JSPS_MONTH_NAMES2[4] = "мая"; JSPS_MDNTH_NAMES_2[5] = "июня"; JSPSM0NTH_NAMES_2[6] = "июля"; JSPS„MONTH_NAMES„2[7] = "августа"; JSPS_MONTH_NAMES_2[8] = "сентября"; JSPS_MONTH_NAMES_2[9] = "октября"; JSPS._MONTH_NAMES_,2[10] = "ноября"; JSPS_M0NTH_NAMES_2[11] = "декабря";

function mjspsToFormattedString(fmString) {

function normalizeN(n) {

var s = n.toStringf);

if (s.length ==1) s = "0" + s;

return S; }

var n;

if (!fmString) fmString = "DA.MO.YE";

fmString = jspsStringReplaceAll(fmString, "DA",

this.getDate() .toString() ) ;

n = this.getDay();

if (n == 0) n = 7;

fmString = JspsStringReplaceAll(fmString, "YD", n.toStringf));

fmString = jspsStringReplaceAll(fmString, "YN", JSPS_DAY_NAMES[n]); fmString = JspsStringReplaceAll(fmString, "MO",normalizeN(this.getMonth() + 1) ) ; fmString = JspsStringReplaceAll(fmString, "MN",SPS_MONTH_NAMES_2[this.getMonth() ] ) ; fmString = JspsStringReplaceAll(fmString, "YE", this. getYear () . toString () ) ; n = this.getHours(); if (fmString.indexOf("AM") != -1) if (n > 12)

{

n = n - 12;

fmString = jspsStringReplaceAll(fmString, "AM", "PM");

} fmString = jspsStringReplaceAll(fmString, "HO", n.toString()); fmString = jspsStringReplaceAll(fmString, "MI",normalizeN(this.getMinutes() )); fmString = jspsStringReplaceAll(fmString, "SE",normalizeN(this.getSeconds() )) ; return fmString; }

Date.prototype.toFormattedString = mjspsToFormattedString;

Пример

var d = new Date();

document.writefd.toFormattedString("DA.MO (MN).YE, день - YD (YN)HO:MI:SE") ) ;

Приведенный сценарий поместит на Web-страницу строку вида "28.04 (апре-ля).2006, день - 5 (пятница) 14:50:39".

Народ советует

Часто используемые форматы вывода даты и времени можно оформить в виде констант (в смысле, псевдоконстант, о которых говорилось в начале этой главы). Например:

var JSPS_DATETIMEFORMAT_FULL = "DA.МО.YE HO:MI:SE";

// 28.04.2006 14:50:39

var JSPS_DATETIMEFORMAT_DATELONG = "DA MN YE г.";

// 28 апреля 2006 г.

var JSPS_DATETIMEFORMAT_DATESHORT = "DA.MO.YE";

// 28.04.2006

var JSPS_DATETIMEFOKMAT_TIMELONG = "HO:MI:SE";

// 14:50:39

var JSPS_DATETIMEFORMAT_TIMEMIDDLE = "HO:MI AM";

// 2:50 PM

var JSPS_DATETIiMEFORMAT_TIMESHORT = "HO:MI";

// 14:50

Впоследствии нам будет достаточно передать методы toFormattedstring объекта Date одну из этих констант-переменных:

var d = new Date();

var s = d.toFormattedstring(JSPS_DATETIMEFORMAT_DATELONG);

Вычисление значения даты, отличающегося от заданного на определенное количество дней

Проблема

Я пишу сценарий, манипулирующий значениями даты. Мне нужно вычислить дату, отстоящую от заданной на определенное количество дней. Как это сделать?

Решение

Использование метода addDays (листинг 1.22) объекта Date. Формат его вызова таков:

<Да та>.addDays(<Колитество дней>);

Единственным параметром в этот метод передается количество дней, на которые нужно увеличить значение даты, содержащееся в экземпляре объекта Date. (Чтобы уменьшить значение даты на определенное количество дней, нужно передать методу addDays отрицательное число, задающее это количество.) Метод не возвращает никакого значения.

Листинг 1.22. Метод addDays объекта Date, вычисляющий значение даты, отстоящее от заданной на определенное количество дней

function mjspsAddDays(daysCount) {

var msInDay = 1000 * 3600 * 24; var msNow = this.getTime() this.setTime(msNow + msInDay * daysCount); }

Date.prototype.addDays = mjspsAddDays;


Пред. - След. »


RLBN.ru - Электроника и компьютеры

0.1446
Hosted by uCoz