如何格式化JavaScript日期

问题描述 投票:1705回答:49

如何格式化JavaScript日期对象以打印为10-Aug-2010

javascript date date-format time-format
49个回答
1046
投票

注意:下面有更好的答案。这个答案写于2010年,从那时起就有了更新更好的解决方案。 OP应接受另一个答案。

function formatDate(date) {
  var monthNames = [
    "January", "February", "March",
    "April", "May", "June", "July",
    "August", "September", "October",
    "November", "December"
  ];

  var day = date.getDate();
  var monthIndex = date.getMonth();
  var year = date.getFullYear();

  return day + ' ' + monthNames[monthIndex] + ' ' + year;
}

console.log(formatDate(new Date()));  // show current date-time in console

您可以编辑数组monthNames以使用Jan,Feb,Mar等。


91
投票

在现代浏览器(*)中,您可以这样做:

var today = new Date().toLocaleDateString('en-GB', {
    day : 'numeric',
    month : 'short',
    year : 'numeric'
}).split(' ').join('-');

如果今天执行输出(2016年1月24日):

'24-Jan-2016'

(*)According to MDN,“现代浏览器”指Chrome 24 +,Firefox 29 +,Internet Explorer 11,Edge 12 +,Opera 15+和Safari nightly build


50
投票

你应该看看date.js。它添加了许多方便的帮助程序来处理日期,例如,在您的情况下:

var date = Date.parse('2010-08-10');
console.log(date.toString('dd-MMM-yyyy'));

入门:http://www.datejs.com/2007/11/27/getting-started-with-datejs/


35
投票

@Sébastien - 替代所有浏览器支持

new Date(parseInt(496407600)*1000).toLocaleDateString('de-DE', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
}).replace(/\./g, '/');

文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString


34
投票

我可以在一行中使用没有库和没有Date方法获得您请求的格式,只是正则表达式:

var d = (new Date()).toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3');
// date will be formatted as "14-Oct-2015" (pass any date object in place of 'new Date()')

更新:正如@RobG所指出的,Date.prototype.toString()的输出是依赖于实现的。因此,如果您使用此解决方案,请谨慎使用并在必要时进行修改。在我的测试中,这在北美可靠地运行,主要浏览器(Chrome,Safari,Firefox和IE)都返回相同的字符串格式。


28
投票

使用ECMAScript Edition 6(ES6 / ES2015)字符串模板:

let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;

如果您需要更改分隔符:

const delimiter = '/';
let formatted = [d.getFullYear(), d.getMonth() + 1, d.getDate()].join(delimiter);

18
投票

这是我刚刚编写的一些代码,用于处理我正在处理的项目的日期格式。它模仿PHP日期格式化功能以满足我的需求。随意使用它,它只是扩展已存在的Date()对象。这可能不是最优雅的解决方案,但它可以满足我的需求。

var d = new Date(); 
d_string = d.format("m/d/Y h:i:s");

/**************************************
 * Date class extension
 * 
 */
    // Provide month names
    Date.prototype.getMonthName = function(){
        var month_names = [
                            'January',
                            'February',
                            'March',
                            'April',
                            'May',
                            'June',
                            'July',
                            'August',
                            'September',
                            'October',
                            'November',
                            'December'
                        ];

        return month_names[this.getMonth()];
    }

    // Provide month abbreviation
    Date.prototype.getMonthAbbr = function(){
        var month_abbrs = [
                            'Jan',
                            'Feb',
                            'Mar',
                            'Apr',
                            'May',
                            'Jun',
                            'Jul',
                            'Aug',
                            'Sep',
                            'Oct',
                            'Nov',
                            'Dec'
                        ];

        return month_abbrs[this.getMonth()];
    }

    // Provide full day of week name
    Date.prototype.getDayFull = function(){
        var days_full = [
                            'Sunday',
                            'Monday',
                            'Tuesday',
                            'Wednesday',
                            'Thursday',
                            'Friday',
                            'Saturday'
                        ];
        return days_full[this.getDay()];
    };

    // Provide full day of week name
    Date.prototype.getDayAbbr = function(){
        var days_abbr = [
                            'Sun',
                            'Mon',
                            'Tue',
                            'Wed',
                            'Thur',
                            'Fri',
                            'Sat'
                        ];
        return days_abbr[this.getDay()];
    };

    // Provide the day of year 1-365
    Date.prototype.getDayOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((this - onejan) / 86400000);
    };

    // Provide the day suffix (st,nd,rd,th)
    Date.prototype.getDaySuffix = function() {
        var d = this.getDate();
        var sfx = ["th","st","nd","rd"];
        var val = d%100;

        return (sfx[(val-20)%10] || sfx[val] || sfx[0]);
    };

    // Provide Week of Year
    Date.prototype.getWeekOfYear = function() {
        var onejan = new Date(this.getFullYear(),0,1);
        return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
    } 

    // Provide if it is a leap year or not
    Date.prototype.isLeapYear = function(){
        var yr = this.getFullYear();

        if ((parseInt(yr)%4) == 0){
            if (parseInt(yr)%100 == 0){
                if (parseInt(yr)%400 != 0){
                    return false;
                }
                if (parseInt(yr)%400 == 0){
                    return true;
                }
            }
            if (parseInt(yr)%100 != 0){
                return true;
            }
        }
        if ((parseInt(yr)%4) != 0){
            return false;
        } 
    };

    // Provide Number of Days in a given month
    Date.prototype.getMonthDayCount = function() {
        var month_day_counts = [
                                    31,
                                    this.isLeapYear() ? 29 : 28,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31,
                                    31,
                                    30,
                                    31,
                                    30,
                                    31
                                ];

        return month_day_counts[this.getMonth()];
    } 

    // format provided date into this.format format
    Date.prototype.format = function(dateFormat){
        // break apart format string into array of characters
        dateFormat = dateFormat.split("");

        var date = this.getDate(),
            month = this.getMonth(),
            hours = this.getHours(),
            minutes = this.getMinutes(),
            seconds = this.getSeconds();
        // get all date properties ( based on PHP date object functionality )
        var date_props = {
            d: date < 10 ? '0'+date : date,
            D: this.getDayAbbr(),
            j: this.getDate(),
            l: this.getDayFull(),
            S: this.getDaySuffix(),
            w: this.getDay(),
            z: this.getDayOfYear(),
            W: this.getWeekOfYear(),
            F: this.getMonthName(),
            m: month < 10 ? '0'+(month+1) : month+1,
            M: this.getMonthAbbr(),
            n: month+1,
            t: this.getMonthDayCount(),
            L: this.isLeapYear() ? '1' : '0',
            Y: this.getFullYear(),
            y: this.getFullYear()+''.substring(2,4),
            a: hours > 12 ? 'pm' : 'am',
            A: hours > 12 ? 'PM' : 'AM',
            g: hours % 12 > 0 ? hours % 12 : 12,
            G: hours > 0 ? hours : "12",
            h: hours % 12 > 0 ? hours % 12 : 12,
            H: hours,
            i: minutes < 10 ? '0' + minutes : minutes,
            s: seconds < 10 ? '0' + seconds : seconds           
        };

        // loop through format array of characters and add matching data else add the format character (:,/, etc.)
        var date_string = "";
        for(var i=0;i<dateFormat.length;i++){
            var f = dateFormat[i];
            if(f.match(/[a-zA-Z]/g)){
                date_string += date_props[f] ? date_props[f] : '';
            } else {
                date_string += f;
            }
        }

        return date_string;
    };
/*
 *
 * END - Date class extension
 * 
 ************************************/

17
投票

好的,我们有一个名为Intl的东西,这对于在JavaScript中格式化日期非常有用:

您的日期如下:

var date = '10/8/2010';

然后使用新的Date()更改为Date,如下所示:

date = new Date(date);

现在,您可以使用以下语言环境列表以任何方式格式化它:

date = new Intl.DateTimeFormat('en-AU').format(date); // Australian date format: "8/10/2010" 

date = new Intl.DateTimeFormat('en-US').format(date); // USA date format: "10/8/2010" 

date = new Intl.DateTimeFormat('ar-EG').format(date);  // Arabic date format: "٨‏/١٠‏/٢٠١٠"

如果您确实需要上面提到的格式,您可以:

date = new Date(Date.UTC(2010, 7, 10, 0, 0, 0));
var options = {year: "numeric", month: "short", day: "numeric"};
date = new Intl.DateTimeFormat("en-AU", options).format(date).replace(/\s/g, '-');

结果将是:

"10-Aug-2010"

有关ECMAScript Internationalization API(Intl)的更多详细信息,请访问here


17
投票

打包解决方案:Luxon

如果你想使用一个解决方案来适应所有,我强烈建议使用Luxon(Moment.js的现代化版本),它也可以在许多语言环境/语言和大量其他功能中进行格式化。

Luxon托管在Moment.js网站上,由Moment.js开发人员开发,因为Moment.js有开发人员想要解决但不能解决的限制。

安装:

npm install luxonyarn add luxon(访问其他安装方法的链接)

例:

luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');

产量:

10 - 8 - 2010

手动解决方案

使用与Moment.js,Class DateTimeFormatter (Java)Class SimpleDateFormat (Java)类似的格式,我实现了一个全面的解决方案formatDate(date, patternStr),其中代码易于阅读和修改。您可以显示日期,时间,上午/下午等。有关更多示例,请参阅代码。

例:

formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')

formatDate在下面的代码片段中实现)

产量:

2018年10月12日星期五18:11:23:445

点击“运行代码段”即可试用该代码。

日期和时间模式

yy = 2位数年份; yyyy =全年

M =数字月; MM = 2位数月份; MMM =短月名; MMMM =完整的月份名称

EEEE =工作日的完整名称; EEE =工作日短名称

d =数字日; dd = 2位数日

h =上午/下午; hh =上午/下午2位数; H =小时; HH = 2位数小时

m =分钟; mm = 2位数分钟; aaa =上午/下午

s =秒; ss = 2位数秒

qazxsw poi =毫秒

S

感谢@Gerry提出Luxon。


15
投票

如果您在代码中使用jQuery UI,则会有一个名为var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; var dayOfWeekNames = [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ]; function formatDate(date, patternStr){ if (!patternStr) { patternStr = 'M/d/yyyy'; } var day = date.getDate(), month = date.getMonth(), year = date.getFullYear(), hour = date.getHours(), minute = date.getMinutes(), second = date.getSeconds(), miliseconds = date.getMilliseconds(), h = hour % 12, hh = twoDigitPad(h), HH = twoDigitPad(hour), mm = twoDigitPad(minute), ss = twoDigitPad(second), aaa = hour < 12 ? 'AM' : 'PM', EEEE = dayOfWeekNames[date.getDay()], EEE = EEEE.substr(0, 3), dd = twoDigitPad(day), M = month + 1, MM = twoDigitPad(M), MMMM = monthNames[month], MMM = MMMM.substr(0, 3), yyyy = year + "", yy = yyyy.substr(2, 2) ; // checks to see if month name will be used if (patternStr.indexOf('MMM') > -1) { patternStr = patternStr .replace('MMMM', MMMM) .replace('MMM', MMM); } else { patternStr = patternStr .replace('MM', MM) .replace('M', M); } return patternStr .replace('hh', hh).replace('h', h) .replace('HH', HH).replace('H', hour) .replace('mm', mm).replace('m', minute) .replace('ss', ss).replace('s', second) .replace('S', miliseconds) .replace('dd', dd).replace('d', day) .replace('EEEE', EEEE).replace('EEE', EEE) .replace('yyyy', yyyy) .replace('yy', yy) .replace('aaa', aaa) ; } function twoDigitPad(num) { return num < 10 ? "0" + num : num; } console.log(formatDate(new Date())); console.log(formatDate(new Date(), 'dd-MMM-yyyy')); //OP's request console.log(formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss.S aaa')); console.log(formatDate(new Date(), 'EEE, MMM d, yyyy HH:mm')); console.log(formatDate(new Date(), 'yyyy-MM-dd HH:mm:ss.S')); console.log(formatDate(new Date(), 'M/dd/yyyy h:mmaaa'));的内置函数。我这样使用它来格式化今天的日期:

formatDate()

你可以看到var testdate = Date(); testdate = $.datepicker.formatDate( "d-M-yy",new Date(testdate)); alert(testdate);


14
投票

我们有很多解决方案,但我认为其中最好的是Moment.js。所以我个人建议使用Moment.js进行日期和时间操作。

many other examples of formatting date in the jQuery UI documentation
console.log(moment().format('DD-MMM-YYYY'));

1537
投票

Use toLocaleDateString()

toLocaleDateString()方法返回一个字符串,其中包含日期日期部分的语言敏感表示。 locales和options参数允许应用程序指定应使用其格式约定的语言,并允许自定义函数的行为。

The values you can passed in options for different keys:

  1. 天: 当天的代表。 可能的值为“数字”,“2位”。
  2. 工作日: 工作日的代表。 可能的值是“窄”,“短”,“长”。
  3. 年: 年度代表。 可能的值为“数字”,“2位”。
  4. 月: 本月的代表。 可能的值是“数字”,“2位”,“窄”,“短”,“长”。
  5. 小时: 小时的表示。 可能的值为“数字”,“2位”。
  6. 分钟:分钟的表示。 可能的值为“数字”,“2位”。
  7. 第二: 第二个的表示。 可能的值为“数字”,2位数字“。

所有这些键都是可选的。您可以根据需要更改选项值的数量,这也将反映每个日期时间项的存在。

注意:如果您只想配置内容选项,但仍使用当前语言环境,则为第一个参数传递null将导致错误。请改用undefined

For different languages:

  1. “en-US”:英语
  2. “hi-IN”:对于印地语
  3. “ja-JP”:对于日本人

您可以使用更多语言选项。

For example

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
var today  = new Date();

console.log(today.toLocaleDateString("en-US")); // 9/17/2016
console.log(today.toLocaleDateString("en-US", options)); // Saturday, September 17, 2016
console.log(today.toLocaleDateString("hi-IN", options)); // शनिवार, 17 सितंबर 2016

您也可以将toLocaleString()方法用于相同的目的。唯一的区别是此功能提供了不传递任何选项的时间。

// Example
9/17/2016, 1:21:34 PM

References:


14
投票

在JavaScript中格式化DateTimes的一种有用且灵活的方法是<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

Intl.DateTimeFormat

结果是:var date = new Date(); var options = { year: 'numeric', month: 'short', day: '2-digit'}; var _resultDate = new Intl.DateTimeFormat('en-GB', options).format(date); // The _resultDate is: "12 Oct 2017" // Replace all spaces with - and then log it. console.log(_resultDate.replace(/ /g,'-'));

可以使用options参数自定义日期和时间格式。

"12-Oct-2017"对象是对象的构造函数,它支持语言敏感的日期和时间格式。

句法

Intl.DateTimeFormat

参数

当地

可选的。带有BCP 47语言标记的字符串,或此类字符串的数组。有关locales参数的一般形式和解释,请参阅Intl页面。允许使用以下Unicode扩展密钥:

new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])

选项

可选的。具有以下部分或全部属性的对象:

localeMatcher

要使用的区域设置匹配算法。可能的值是nu Numbering system. Possible values include: "arab", "arabext", "bali", "beng", "deva", "fullwide", "gujr", "guru", "hanidec", "khmr", "knda", "laoo", "latn", "limb", "mlym", "mong", "mymr", "orya", "tamldec", "telu", "thai", "tibt". ca Calendar. Possible values include: "buddhist", "chinese", "coptic", "ethioaa", "ethiopic", "gregory", "hebrew", "indian", "islamic", "islamicc", "iso8601", "japanese", "persian", "roc". "lookup";默认值为"best fit"。有关此选项的信息,请参阅Intl页面。

时区

要使用的时区。唯一值实现必须识别的是"best fit";默认值是运行时的默认时区。实现还可以识别IANA时区数据库的时区名称,例如"UTC""Asia/Shanghai""Asia/Kolkata"

hour12

是否使用12小时时间(而不是24小时时间)。可能的值是"America/New_York"true;默认值取决于语言环境。

formatMatcher

要使用的格式匹配算法。可能的值是false"basic";默认值为"best fit"。有关使用此属性的信息,请参阅以下段落。

以下属性描述了在格式化输出中使用的日期时间组件及其所需的表示形式。需要实现至少支持以下子集:

"best fit"

实现可以支持其他子集,并且将针对所有可用的子集表示组合协商请求以找到最佳匹配。两种算法可用于此协商,并由formatMatcher属性选择:完全指定的weekday, year, month, day, hour, minute, second weekday, year, month, day year, month, day year, month month, day hour, minute, second hour, minute 算法和依赖于实现的“最佳拟合”算法。

平日

工作日的代表。可能的值是"basic""narrow""short"

我是

时代的代表。可能的值是"long""narrow""short"

年度代表。可能的值是"long""numeric"

本月的代表。可能的值是"2-digit""numeric""2-digit""narrow""short"

当天的代表。可能的值是"long""numeric"

小时

小时的表示。可能的值是"2-digit""numeric"

分钟

分钟的表示。可能的值是"2-digit""numeric"

第二

第二个的表示。可能的值是"2-digit""numeric"

TIMEZONENAME

时区名称的表示形式。可能的值是"2-digit""short"。每个日期时间组件属性的默认值是未定义的,但如果未定义所有组件属性,则假定年,月和日为"long"

"numeric"

Check Online


14
投票

不使用任何外部库的JavaScript解决方案:

More Details

13
投票

这就是我为我的npm插件实现的方式

var now = new Date()
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
var formattedDate = now.getDate() + "-" + months[now.getMonth()] + "-" + now.getFullYear()
alert(formattedDate)

13
投票

var monthNames = [
  "January", "February", "March",
  "April", "May", "June", "July",
  "August", "September", "October",
  "November", "December"
];

var Days = [
  "Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"
];

var formatDate = function(dt,format){
  format = format.replace('ss', pad(dt.getSeconds(),2));
  format = format.replace('s', dt.getSeconds());
  format = format.replace('dd', pad(dt.getDate(),2));
  format = format.replace('d', dt.getDate());
  format = format.replace('mm', pad(dt.getMinutes(),2));
  format = format.replace('m', dt.getMinutes());
  format = format.replace('MMMM', monthNames[dt.getMonth()]);
  format = format.replace('MMM', monthNames[dt.getMonth()].substring(0,3));
  format = format.replace('MM', pad(dt.getMonth()+1,2));
  format = format.replace(/M(?![ao])/, dt.getMonth()+1);
  format = format.replace('DD', Days[dt.getDay()]);
  format = format.replace(/D(?!e)/, Days[dt.getDay()].substring(0,3));
  format = format.replace('yyyy', dt.getFullYear());
  format = format.replace('YYYY', dt.getFullYear());
  format = format.replace('yy', (dt.getFullYear()+"").substring(2));
  format = format.replace('YY', (dt.getFullYear()+"").substring(2));
  format = format.replace('HH', pad(dt.getHours(),2));
  format = format.replace('H', dt.getHours());
  return format;
}

pad = function(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

new Date().toLocaleDateString() // "3/21/2018"上有更多文档


11
投票

这可能有助于解决问题:

var d = new Date(); var options = { day: 'numeric', month: 'long', year: 'numeric' }; console.log(d.toLocaleDateString('en-ZA', options));


9
投票
Date to locate format

8
投票

Sugar.js具有对Date对象的出色扩展,包括var today = new Date(); var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString(); 方法。

文档中的示例:

Date.format

8
投票

任何人都在寻找一个非常简单的ES6解决方案来复制,粘贴和采用:

Date.create().format('{Weekday} {Month} {dd}, {yyyy}');

Date.create().format('{12hr}:{mm}{tt}')

5
投票

要获得“2010年8月10日”,请尝试:

const dateToString = d => `${d.getFullYear()}-${('00' + (d.getMonth() + 1)).slice(-2)}-${('00' + d.getDate()).slice(-2)}` 

// how to use:
const myDate = new Date(Date.parse('04 Dec 1995 00:12:00 GMT'))
console.log(dateToString(myDate)) // 1995-12-04

有关浏览器支持,请参阅var date = new Date('2010-08-10 00:00:00'); date = date.toLocaleDateString(undefined, {day:'2-digit'}) + '-' + date.toLocaleDateString(undefined, {month:'short'}) + '-' + date.toLocaleDateString(undefined, {year:'numeric'})


4
投票

toLocaleDateString插件添加到您的页面:

jQuery UI

568
投票

使用date.format library

var dateFormat = require('dateformat');
var now = new Date();
dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");

收益:

Saturday, June 9th, 2007, 5:46:21 PM 

dateformat on npm

http://jsfiddle.net/phZr7/1/


4
投票

试试这个:

function DateFormate(dateFormate, datetime) {
    return $.datepicker.formatDate(dateFormate, datetime);
};
function init(){
    var d = new Date();
    var day = d.getDate();
    var x = d.toDateString().substr(4, 3);
    var year = d.getFullYear();
    document.querySelector("#mydate").innerHTML = day + '-' + x + '-' + year;
}
window.onload = init;

426
投票

如果您需要使用纯JavaScript快速格式化日期,请使用getDategetMonth + 1getFullYeargetHoursgetMinutes

var d = new Date();

var datestring = d.getDate()  + "-" + (d.getMonth()+1) + "-" + d.getFullYear() + " " +
d.getHours() + ":" + d.getMinutes();

// 16-5-2015 9:50

或者,如果您需要用零填充:

var datestring = ("0" + d.getDate()).slice(-2) + "-" + ("0"+(d.getMonth()+1)).slice(-2) + "-" +
    d.getFullYear() + " " + ("0" + d.getHours()).slice(-2) + ":" + ("0" + d.getMinutes()).slice(-2);

// 16-05-2015 09:50

352
投票

好吧,我想要的是将今天的日期转换为像2012-06-23这样的MySQL友好日期字符串,并在我的一个查询中使用该字符串作为参数。我发现的简单解决方案是这样的:

var today = new Date().toISOString().slice(0, 10);

请注意,上述解决方案未考虑您的时区偏移。

您可以考虑使用此功能:

function toJSONLocal (date) {
    var local = new Date(date);
    local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
    return local.toJSON().slice(0, 10);
}

如果您在当天的开始/结束时执行此代码,这将为您提供正确的日期。


177
投票

自定义格式功能:

对于固定格式,一个简单的功能可以完成工作。以下示例生成国际格式YYYY-MM-DD:

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1; //Month from 0 to 11
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

OP格式可以生成如下:

function dateToYMD(date) {
    var strArray=['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var d = date.getDate();
    var m = strArray[date.getMonth()];
    var y = date.getFullYear();
    return '' + (d <= 9 ? '0' + d : d) + '-' + m + '-' + y;
}
console.log(dateToYMD(new Date(2017,10,5))); // Nov 5

注意:然而,扩展JavaScript标准库通常不是一个好主意(例如,通过将此函数添加到Date的原型)。

更高级的功能可以基于格式参数生成可配置输出。

如果要编写格式化函数太长,那么就会有很多库。其他一些答案已经列举了它们。但是,越来越多的依赖关系也会与之相反。

标准ECMAScript格式化功能:

从ECMAScript的最新版本开始,Date类具有一些特定的格式化功能:

toDateString:依赖于实现,仅显示日期。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString:显示ISO 8601日期和时间。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON:JSON的Stringifier。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString:依赖于实现,以区域设置格式的日期。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString:依赖于实现,以区域设置格式的日期和时间。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString:依赖于实现,是区域设置格式的时间。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString:Date的通用toString。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 21 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

注意:可以从那些格式>生成自定义输出

new Date().toISOString().slice(0,10); //return YYYY-MM-DD

示例摘要:

console.log("1) "+  new Date().toDateString());
console.log("2) "+  new Date().toISOString());
console.log("3) "+  new Date().toJSON());
console.log("4) "+  new Date().toLocaleDateString());
console.log("5) "+  new Date().toLocaleString());
console.log("6) "+  new Date().toLocaleTimeString());
console.log("7) "+  new Date().toString());
console.log("8) "+  new Date().toISOString().slice(0,10));

168
投票

如果您已经在项目中使用jQuery UI,则可以这样做:

var formatted = $.datepicker.formatDate("M d, yy", new Date("2014-07-08T09:02:21.377"));

// formatted will be 'Jul 8, 2014'

可以使用的一些日期选择器日期格式选项here


124
投票

我想你可以使用非标准的Date方法toLocaleFormat(formatString)

formatString:格式字符串,格式为c中strftime()函数所需的格式。

var today = new Date();
today.toLocaleFormat('%d-%b-%Y'); // 30-Dec-2011

参考文献:


99
投票

简单的JavaScript是小型onetimers的最佳选择。

另一方面,如果您需要更多日期,MomentJS是一个很好的解决方案。

例如:

moment().format('YYYY-MM-DD HH:m:s');     // now() -> 2015-03-24 14:32:20
moment("20111031", "YYYYMMDD").fromNow(); // 3 years ago
moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago
moment().startOf('day').fromNow();        // 11 hours ago
moment().endOf('day').fromNow();          // in 13 hours
© www.soinside.com 2019 - 2024. All rights reserved.