如何格式化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
使用toLocaleDateString();
toLocaleDateString()方法返回一个string,其中包含date的date部分的语言敏感表示。 locale和options参数让应用程序指定应使用格式约定的语言,并允许自定义函数的行为。
您可以在不同的键的选项中传递的值:
- 天:
一天的表示。
可能的值是“数字”,“2位”。 - 工作日:
周日的表示。
可能的值是“窄”,“短”,“长”。 - 年:
年的表示。
可能的值是“数字”,“2位”。 - 月:
月份的表示。
可能的值是“数字”,“2位”,“窄”,“短”,“长”。 - 小时:
小时的表示。
可能的值是“数字”,“2位”。 - 分钟:分钟的表示。
可能的值是“数字”,“2位”。 - 第二:
第二个的表示。
可能的值是“数字”,2位“。
所有这些键都是可选的。您可以根据您的要求更改选项值的数量。
对于不同的语言:
- “en-US”:英文
- “hi-in”:用于印地语
- “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()
那么,我想要的是将今天的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,请使用getDate
, getMonth + 1
, getFullYear
, getHours
和getMinutes
:
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小时的时间)。 可能的值是true
和false
; 默认值是语言环境相关的。
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()); }