Как я форматирую Дату JavaScript?

Вы можете сделать это с помощью linq следующим образом.

string query = "id=3123123&userId=44423&format=json";

Dictionary dicQueryString = 
        query.Split('&')
             .ToDictionary(c => c.Split('=')[0],
                           c => Uri.UnescapeDataString(c.Split('=')[1]));

string userId = dicQueryString["userID"];

Редактировать

Если вы можете использовать HttpUtility.ParseQueryString , то это будет намного проще и не будет чувствительным к регистру, как в чехол LinQ.

13
задан Helen 12 June 2009 в 13:40
поделиться

6 ответов

Вы прототипируете метод, поэтому вам больше не придется выполнять эту раздражающую задачу:

Date.prototype.toFormattedString = function (f)
{
    var nm = this.getMonthName();
    var nd = this.getDayName();
    f = f.replace(/yyyy/g, this.getFullYear());
    f = f.replace(/yy/g, String(this.getFullYear()).substr(2,2));
    f = f.replace(/MMM/g, nm.substr(0,3).toUpperCase());
    f = f.replace(/Mmm/g, nm.substr(0,3));
    f = f.replace(/MM\*/g, nm.toUpperCase());
    f = f.replace(/Mm\*/g, nm);
    f = f.replace(/mm/g, String(this.getMonth()+1).padLeft('0',2));
    f = f.replace(/DDD/g, nd.substr(0,3).toUpperCase());
    f = f.replace(/Ddd/g, nd.substr(0,3));
    f = f.replace(/DD\*/g, nd.toUpperCase());
    f = f.replace(/Dd\*/g, nd);
    f = f.replace(/dd/g, String(this.getDate()).padLeft('0',2));
    f = f.replace(/d\*/g, this.getDate());
    return f;
};

(и да, вы можете связать эти замены, но это не здесь для удобства чтения, прежде чем кто-нибудь спросит)


По запросу, дополнительные прототипы для поддержки приведенного выше фрагмента.

Date.prototype.getMonthName = function ()
{
    return this.toLocaleString().replace(/[^a-z]/gi,'');
};

//n.b. this is sooo not i18n safe :)
Date.prototype.getDayName = function ()
{
    switch(this.getDay())
    {
        case 0: return 'Sunday';
        case 1: return 'Monday';
        case 2: return 'Tuesday';
        case 3: return 'Wednesday';
        case 4: return 'Thursday';
        case 5: return 'Friday';
        case 6: return 'Saturday';
    }
};

String.prototype.padLeft = function (value, size) 
{
    var x = this;
    while (x.length < size) {x = value + x;}
    return x;
};

и пример использования:

alert((new Date()).toFormattedString('dd Mmm, yyyy'));
31
ответ дан 1 December 2019 в 17:55
поделиться

Имея соответствующую библиотеку, вы можете интернационализировать свое приложение для всего мира с помощью всего нескольких строк кода. По умолчанию он автоматически локализует дату для локали браузера, но вы также можете определить свои собственные шаблоны:

dojo.date.locale.format(
  new Date(2007,2,23,6,6,6),
  {datePattern: "yyyy-MM-dd", selector: "date"}
);
// yields: "2007-03-23"

From: Форматирование даты и времени с использованием пользовательских шаблонов

1
ответ дан 1 December 2019 в 17:55
поделиться

Вы должны придерживаться старой школы:

Date.prototype.toMMddyyyy = function() {

    var padNumber = function(number) {

        number = number.toString();

        if (number.length === 1) {
            return "0" + number;
        }
        return number;
    };

    return padNumber(date.getMonth() + 1) + "/" 
         + padNumber(date.getDate()) + "/" + date.getFullYear();
};
7
ответ дан 1 December 2019 в 17:55
поделиться

YUI also provides support for date formatting, which was covered in a series of recent blog posts:

1
ответ дан 1 December 2019 в 17:55
поделиться

Еще один вариант:

Библиотека DP_DateExtensions

Не говорю, что он лучше других вариантов, но мне он нравится (конечно, я не совсем объективен).

0
ответ дан 1 December 2019 в 17:55
поделиться

Вы вырвали функцию .toFormattedString из отличной и ныне печально утерянной библиотеки atlas компании microsoft:

Date.prototype.toFormattedString = function (format) {
    var dtf = Sys.CultureInfo.DateTimeFormat;

    if (!format)
        format = "F";

    if (format.length == 1) {
        switch (format) {
            case "d":
                format = dtf.ShortDatePattern;
                break;
            case "D":
                format = dtf.LongDatePattern;
                break;
            case "t":
                format = dtf.ShortTimePattern;
                break;
            case "T":
                format = dtf.LongTimePattern;
                break;
            case "F":
                format = dtf.FullDateTimePattern;
                break;
            case "M": case "m":
                format = dtf.MonthDayPattern;
                break;
            case "s":
                format = dtf.SortableDateTimePattern;
                break;
            case "Y": case "y":
                format = dtf.YearMonthPattern;
                break;
            default:
                throw Error.createError("'" + format + "' is not a valid date format");
        }
    }

    var regex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z/g;

    var ret = "";
    var hour;

    function addLeadingZero(num) {
        if (num < 10) {
            return '0' + num;
        }
        return num.toString();
    }

    function addLeadingZeros(num) {
        if (num < 10) {
            return '00' + num;
        }
        if (num < 100) {
            return '0' + num;
        }
        return num.toString();
    }

    for (; ; ) {

        var index = regex.lastIndex;

        var ar = regex.exec(format);

        ret += format.slice(index, ar ? ar.index : format.length);

        if (!ar) break;

        switch (ar[0]) {
            case "dddd":
                ret += dtf.DayNames[this.getDay()];
                break;
            case "ddd":
                ret += dtf.AbbreviatedDayNames[this.getDay()];
                break;
            case "dd":
                ret += addLeadingZero(this.getDate());
                break;
            case "d":
                ret += this.getDate();
                break;
            case "MMMM":
                ret += dtf.MonthNames[this.getMonth()];
                break;
            case "MMM":
                ret += dtf.AbbreviatedMonthNames[this.getMonth()];
                break;
            case "MM":
                ret += addLeadingZero(this.getMonth() + 1);
                break;
            case "M":
                ret += this.getMonth() + 1;
                break;
            case "yyyy":
                ret += this.getFullYear();
                break;
            case "yy":
                ret += addLeadingZero(this.getFullYear() % 100);
                break;
            case "y":
                ret += this.getFullYear() % 100;
                break;
            case "hh":
                hour = this.getHours() % 12;
                if (hour == 0) hour = 12;
                ret += addLeadingZero(hour);
                break;
            case "h":
                hour = this.getHours() % 12;
                if (hour == 0) hour = 12;
                ret += hour;
                break;
            case "HH":
                ret += addLeadingZero(this.getHours());
                break;
            case "H":
                ret += this.getHours();
                break;
            case "mm":
                ret += addLeadingZero(this.getMinutes());
                break;
            case "m":
                ret += this.getMinutes();
                break;
            case "ss":
                ret += addLeadingZero(this.getSeconds());
                break;
            case "s":
                ret += this.getSeconds();
                break;
            case "tt":
                ret += (this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator;
                break;
            case "t":
                ret += ((this.getHours() < 12) ? dtf.AMDesignator : dtf.PMDesignator).charAt(0);
                break;
            case "f":
                ret += addLeadingZeros(this.getMilliseconds()).charAt(0);
                break;
            case "ff":
                ret += addLeadingZeros(this.getMilliseconds()).substr(0, 2);
                break;
            case "fff":
                ret += addLeadingZeros(this.getMilliseconds());
                break;
            case "z":
                hour = this.getTimezoneOffset() / 60;
                ret += ((hour >= 0) ? '+' : '-') + Math.floor(Math.abs(hour));
                break;
            case "zz":
                hour = this.getTimezoneOffset() / 60;
                ret += ((hour >= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour)));
                break;
            case "zzz":
                hour = this.getTimezoneOffset() / 60;
                ret += ((hour >= 0) ? '+' : '-') + addLeadingZero(Math.floor(Math.abs(hour))) +
                dtf.TimeSeparator + addLeadingZero(Math.abs(this.getTimezoneOffset() % 60));
                break;
            default:
                debug.assert(false);
        }
    }
    return ret;
}
1
ответ дан 1 December 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: