如何格式化JavaScriptdate

如何将JavaScriptdate对象格式化为“2010年8月10日”?

 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 

使用date.format库 :

 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/

使用toLocaleDateString();

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

您可以在不同的键的选项中传递的值:

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

所有这些键都是可选的。您可以根据您的要求更改选项值的数量。

对于不同的语言:

  1. “en-US”:英文
  2. “hi-in”:用于印地语
  3. “ja-JP”:日语

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

例如

 var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }; var today = new Date(); console.log(today.toLocaleDateString("en-US")); console.log(today.toLocaleDateString("en-US",options)); console.log(today.toLocaleDateString("hi-IN", options)); // Outputs will be - 9/17/2016 Saturday, September 17, 2016 शनिवार, 17 सितंबर 2016 

您也可以使用toLocaleString()方法来达到同样的目的。 唯一的区别是这个函数提供了你不通过任何选项的时间。

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

参考文献:

对于toLocaleString()

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

对于toLocaleDateString()

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

那么,我想要的是将今天的date转换为一个MySQL友好的datestring,如2012-06-23,并使用该string作为我的查询之一的参数。 我find的简单解决scheme是这样的:

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

请记住,上述解决scheme不考虑您的时区偏移量。

你可以考虑使用这个函数:

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

如果您在一天的开始/结束时执行此代码,这会给您正确的date。

  • 例如: http : //jsfiddle.net/simo/sapuhzmm/
  • Date.toISOString
  • Date.toJSON
  • String.slice

如果您需要使用普通JavaScript快速格式化date,请使用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 

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

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

一些dateselectdate格式选项玩在这里 。

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

formatString:与C中的strftime()函数所期望的格式string格式相同

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

参考文献:

  • tolocaleformat
  • 的strftime

普通的JavaScript是小型单播者的最佳select。

另一方面,如果你需要更多的date, MomentJS是一个很好的解决scheme。

例如:

 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 

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

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

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

 '24-Jan-2016' 

(*) 根据MDN的说法 ,“现代浏览器”意味着Chrome 24+,Firefox 29+,Internet Explorer 11,Edge 12+,Opera 15+和Safari 夜间版本

你应该看看date.js。 它添加了很多方便的助手来处理date,例如,在你的情况下:

 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/

自定义格式function:

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

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

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; } 

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

更高级的function可以基于格式参数生成可configuration的输出。

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

标准ECMAScript格式化function:

由于ECMAScript的更新版本, Date类具有一些特定的格式function:

toDateString :依赖于实现,只显示date。

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

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

toISOString :显示ISO 8601的date和时间。

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

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

toJSON :JSON的string。

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

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

toLocaleDateString :依赖于实现,一个以区域设置格式的date。

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

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

toLocaleString :依赖于实现,以区域设置格式显示date和时间。

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

 new Date().toLocaleString(); // eg "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(); // eg "08:00:00 AM" 

toString :date的通用toString。

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

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

注意:可以从这些格式化函数中生成自定义输出:

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

@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

我可以得到你的请求格式在一行中使用没有库和没有date方法,只是正则expression式:

 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()的输出是依赖于实现的。 因此,如果您使用此解决scheme,请谨慎使用并根据需要进行修改。 在我的testing中,在主stream浏览器(Chrome,Safari,Firefox和IE)都返回相同的string格式的北美地区,这种方法可靠地运行。

以下是我刚写的一些代码,用于处理我正在处理的项目的date格式。 它模仿PHPdate格式function,以适应我的需要。 随意使用它,它只是扩展已经存在的Date()对象。 这可能不是最优雅的解决scheme,但它正在满足我的需求。

 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 * ************************************/ 

如果您在代码中使用jQuery UI,则会有一个名为formatDate()的内置函数。 我用这种方式来格式化今天的date:

 var testdate = Date(); testdate = $.datepicker.formatDate( "dM-yy",new Date(testdate)); alert(testdate); 

您可以在jQuery UI文档中看到许多其他格式化date的示例 。

我们有很多解决scheme,但我认为最好的是Moment.js。 所以我个人build议使用Moment.js进行date和时间操作。

 console.log(moment().format('DD-MMM-YYYY')); 
 <script src="ajax/libs/moment.js/2.14.1/moment.min.js"></script> 

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

 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) 
 var today = new Date(); var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString(); 

这是我为我的npm插件实现的

 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; } 

使用ECMAScript 6string模板:

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

如果您需要更改分隔符:

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

Sugar.js对Date对象有很好的扩展,包括一个Date.format方法。

文档中的示例:

 Date.create().format('{Weekday} {Month} {dd}, {yyyy}'); Date.create().format('{12hr}:{mm}{tt}') 

好的 ,我们得到了一些叫做Intl的东西,这对于在JavaScript中格式化date非常有用:

你的date如下:

 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国际化API(国际)的更多详细信息,请访问此处 。

用于格式化JavaScript中DateTimes的有用且灵活的方法是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,'-')); 

结果是: "12-Oct-2017"

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

Intl.DateTimeFormat对象是启用语言敏感的date和时间格式的对象的构造函数。

句法

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

参数

语言环境

可选的。 一个带有BCP 47语言标签的string或这种string的数组。 有关locales参数的一般forms和解释,请参阅Intl页面。 以下Unicode扩展键是被允许的:

 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". 

选项

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

localeMatcher

要使用的语言环境匹配algorithm。 可能的值是"lookup""best fit" ; 默认是"best fit" 。 有关此选项的信息,请参阅Intl页面。

时区

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

hour12

是否使用12小时的时间(而不是24小时的时间)。 可能的值是truefalse ; 默认值是语言环境相关的。

formatMatcher

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

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

 weekday, year, month, day, hour, minute, second weekday, year, month, day year, month, day year, month month, day hour, minute, second hour, minute 

实现可以支持其他子集,并且将针对所有可用的子集表示组合来协商请求以find最佳匹配。 两种algorithm可用于此协商,并由formatMatcher属性进行select:完全指定的"basic"algorithm和依赖于实现的“最佳拟合”algorithm。

平日

周日的表示。 可能的值是"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""2-digit"

TIMEZONENAME

时区名称的表示。 可能的值是"short""long" 。 每个date时间组件属性的默认值是未定义的,但是如果所有组件属性都是未定义的,则假定年,月和日是"numeric"

在线检查

更多细节

尝试这个:

 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; 
 <div id="mydate"></div> 

这是一个脚本,完全是你想要的

https://github.com/UziTech/js-date-format

 var d = new Date("2010-8-10"); document.write(d.format("DD-MMM-YYYY")); 

受到JD史密斯奇妙的正则expression式解决scheme的启发,我突然有了这个头脑分裂的想法:

 var D = Date().toString().split(" "); document.getElementById("demo").innerHTML = D[2] + "-" + D[1] + "-" + D[3]; 

将jQuery UI插件添加到您的页面:

 function DateFormate(dateFormate, datetime) { return $.datepicker.formatDate(dateFormate, datetime); }; 

我使用以下。 这很简单,工作正常。

  var dtFormat = require('dtformat'); var today = new Date(); dtFormat(today, "dddd, mmmm dS, yyyy, h:MM:ss TT"); 

或这个:

 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) 

如果您已经在项目中使用ExtJS ,则可以使用Ext.Date :

 var date = new Date(); Ext.Date.format(date, "dMY"); 

收益:

 "11-Nov-2015" 

如果你喜欢简短的,人类可读的function – 这很容易调整,以适应你。

timeStamp参数从1970年开始为毫秒 – 它由new Date().getTime()和许多其他设备返回。

好吧,我改变了主意。 我包含了一个额外的零填充函数。 诅咒!

  function zeroPad(aNumber) { return ("0"+aNumber).slice(-2); } function humanTime(timeStamp) { var M = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; var D = new Date(timeStamp); // 23 Aug 2016 16:45:59 <-- Desired format. return D.getDate() + " " + M[D.getMonth()] + " " + D.getFullYear() + " " + D.getHours() + ":" + zeroPad(d.getMinutes()) + ":" + zeroPad(D.getSeconds()); } 
Interesting Posts