Как мне отформатировать Javascript Date? - PullRequest
14 голосов
/ 12 июня 2009

Как мне отформатировать эту дату, чтобы предупреждение отображало дату в формате MM / dd / yyyy?

<script type="text/javascript">
   var date = new Date();
   alert(date);
</script>

Ответы [ 11 ]

32 голосов
/ 12 июня 2009

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

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'));
7 голосов
/ 12 июня 2009

Ты должен получить старую школу:

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();
};
4 голосов
/ 29 июня 2012

добавить плагин Jquery Ui на свою страницу

alert($.datepicker.formatDate('dd M yy', new Date()));
1 голос
/ 20 июля 2010

Вы извлекли функцию .toFormattedString из 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 голос
/ 15 июля 2009
1 голос
/ 12 июня 2009

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

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

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

0 голосов
/ 08 октября 2017

2017 год ответ: используйте moment.js

0 голосов
/ 30 июня 2016

Простой формат будет:

var d = new Date() // Thu Jun 30 2016 12:50:43 GMT-0500 (Central Daylight Time (Mexico))
d.toJSON(); // "2016-06-30T17:50:43.084Z"
0 голосов
/ 03 декабря 2014

Вы можете попробовать:

date = new Date().toLocaleDateString().split("/")
date[0].length == 1 ? "0" + date[0] : date[0]
date[1].length == 1 ? "0" + date[1] : date[1]
date = date[0] + "/" + date[1] + "/" + date[2]
0 голосов
/ 08 октября 2012

Попробуйте date.js , например:

<script type="text/javascript">
   alert(new Date().toString('M/d/yyyy'));
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...