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()')
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"
可以使用options参数自定义日期和时间格式 .
Intl.DateTimeFormat 对象是对象的构造函数,用于启用语言敏感的日期和时间格式 .
句法
new Intl.DateTimeFormat([locales[, options]])
Intl.DateTimeFormat.call(this[, locales[, options]])
var today = new Date().toISOString().slice(0, 10);
请记住,上述解决方案确实 not 考虑了您的时区偏移量 .
您可以考虑使用此功能:
function toJSONLocal (date) {
var local = new Date(date);
local.setMinutes(date.getMinutes() - date.getTimezoneOffset());
return local.toJSON().slice(0, 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
您可以编辑数组 monthNames 以使用Jan,Feb,Mar等 .
939
任何人都在寻找一个非常简单的ES6解决方案来复制,粘贴和采用:
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
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 .
92
自定义格式化功能:
对于固定格式,一个简单的功能可以完成工作 . 以下示例生成国际格式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
toDateString:依赖于实现,仅显示日期 . http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring new Date() . toDateString(); //例如“2016年11月11日星期五”
toISOString:显示ISO 8601日期和时间 . http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring new Date() . toISOString(); //例如“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(); //例如“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(); //例如“21/11/2016”
toLocaleString:依赖于实现,以区域设置格式的日期和时间 . http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring new Date() . toLocaleString(); //例如“2016/11/11,08:00:00 AM”
toLocaleTimeString:依赖于实现,是语言环境格式的时间 . http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring new Date() . toLocaleTimeString(); //例如“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(); //例如“星期五2016年11月21日08:00:00 GMT 0100(欧洲标准时间)
注意:可以从那些格式>生成自定义输出
new Date() . toISOString() . slice(0,10); //返回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));
48
var today = new Date();
var formattedToday = today.toLocaleDateString() + ' ' + today.toLocaleTimeString();
var today = new Date().toLocaleDateString('en-GB', {
day : 'numeric',
month : 'short',
year : 'numeric'
}).split(' ').join('-');
如果今天执行输出(2016年1月24日):
'24-Jan-2016'
(*)According to MDN,"modern browsers"表示Chrome 24,Firefox 29,Internet Explorer 11,Edge 12,Opera 15和Safari nightly build .
7
不使用任何外部库的JavaScript解决方案:
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)
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
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>
160
使用ECMAScript Edition 6(ES6 / ES2015)字符串模板:
let d = new Date();
let formatted = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;
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;
}
30 回答
Packaged Solution: moment.js
如果你想使用一个解决方案来适应所有,我强烈建议使用moment.js,它也可以在许多语言环境/语言和大量其他功能中进行格式化 .
安装:
npm install moment
或yarn add moment
(访问其他安装方法的链接)例:
moment("2010-08-10").format("DD-MMM-YYYY")
产量:
Manual Solution
使用与Moment.js,Class DateTimeFormatter (Java)和Class SimpleDateFormat (Java)类似的格式,我实现了一个全面的解决方案
formatDate(date, patternStr)
,其中代码易于阅读和修改 . 您可以显示日期,时间,上午/下午等 . 有关更多示例,请参阅代码 .例:
formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')
(
formatDate
在下面的代码片段中实现)产量:
点击“运行代码段”即可试用该代码 .
Date and Time Patterns
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位数秒S
=毫秒你应该看一下date.js . 它添加了许多方便的帮助程序来处理日期,例如,在您的情况下:
入门:http://www.datejs.com/2007/11/27/getting-started-with-datejs/
我可以在一行中使用没有库和没有Date方法获取您请求的格式,只需正则表达式:
更新:正如@RobG所指出的,Date.prototype.toString()的输出是依赖于实现的 . 因此,如果您使用此解决方案,请谨慎使用并在必要时进行修改 . 在我的测试中,这在北美可靠地运行,主要浏览器(Chrome,Safari,Firefox和IE)都返回相同的字符串格式 .
嗨检查这是否有助于解决您的问题 .
在JavaScript中格式化DateTimes的一种有用且灵活的方法是
Intl.DateTimeFormat
:结果是:
"12-Oct-2017"
可以使用options参数自定义日期和时间格式 .
Intl.DateTimeFormat
对象是对象的构造函数,用于启用语言敏感的日期和时间格式 .句法
Parameters
locales
可选的 . 带有BCP 47语言标记的字符串,或此类字符串的数组 . 有关locales参数的一般形式和解释,请参阅Intl页面 . 允许使用以下Unicode扩展密钥:
Options
可选的 . 具有以下部分或全部属性的对象:
localeMatcher
要使用的区域设置匹配算法 . 可能的值为
"lookup"
和"best fit"
;默认值为"best fit"
. 有关此选项的信息,请参阅Intl页面 .timeZone
要使用的时区 . 唯一值实现必须识别的是
"UTC"
;默认值是运行时的默认时区 . 实现还可以识别IANA时区数据库的时区名称,例如"Asia/Shanghai"
,"Asia/Kolkata"
,"America/New_York"
.hour12
是否使用12小时的时间(而不是24小时的时间) . 可能的值为
true
和false
;默认值取决于语言环境 .formatMatcher
要使用的格式匹配算法 . 可能的值为
"basic"
和"best fit"
;默认值为"best fit"
. 有关使用此属性的信息,请参阅以下段落 .以下属性描述了在格式化输出中使用的日期时间组件及其所需的表示形式 . 需要实现至少支持以下子集:
实现可以支持其他子集,并且将针对所有可用的子集表示组合协商请求以找到最佳匹配 . 有两种算法可用于此协商,并由formatMatcher属性选择:完全指定的
"basic"
算法和依赖于实现的算法"best fit"算法 .weekday
工作日的代表 . 可能的值为
"narrow"
,3752325,"long"
.era
时代的代表 . 可能的值为
"narrow"
,3752329,"long"
.year
年度代表 . 可能的值为
"numeric"
,3775333 .month
本月的代表 . 可能的值为
"numeric"
,3775336,"narrow"
,"short"
,"long"
.day
当天的代表 . 可能的值为
"numeric"
,"2-digit"
.hour
小时的表示 . 可能的值为
"numeric"
,"2-digit"
.minute
分钟的表示 . 可能的值为
"numeric"
,"2-digit"
.second
第二个的表示 . 可能的值为
"numeric"
,"2-digit"
.timeZoneName
时区名称的表示形式 . 可能的值为
"short"
,"long"
. 默认值对于每个日期时间组件属性未定义,但如果未定义所有组件属性,则假定年,月和日为"numeric"
.Check Online
More Details
如果你在项目中是 already using jQuery UI ,你可以这样做:
可以使用一些要使用的日期选择器日期格式选项here .
好吧,我想要的是将今天的日期转换为像2012-06-23这样的MySQL友好日期字符串,并在我的一个查询中将该字符串用作参数 . 我发现的简单解决方案是这样的:
请记住,上述解决方案确实 not 考虑了您的时区偏移量 .
您可以考虑使用此功能:
如果您在当天的开始/结束时执行此代码,这将为您提供正确的日期 .
示例:http://jsfiddle.net/simo/sapuhzmm/
Date.toISOString
Date.toJSON
String.slice
使用toLocaleDateString();
toLocaleDateString()
方法返回一个字符串,其中包含日期日期部分的语言敏感表示 . locales和options参数允许应用程序指定应使用其格式约定的语言,并允许自定义函数的行为 .您可以在不同键的选项中传递的值:
day:
当天的代表 .
可能的值为"numeric","2-digit" .
weekday:
工作日的代表 .
可能的值为"narrow","short","long" .
year:
年度代表 .
可能的值为"numeric",3775207 .
month:
本月的代表 .
可能的值为"numeric","2-digit","narrow","short","long" .
hour:
小时的表示 .
可能的值为"numeric","2-digit" .
minute: 分钟的表示 .
可能的值为"numeric","2-digit" .
second:
第二个的表示 .
可能的值为"numeric",2位“ .
所有这些键都是可选的 . 您可以根据需要更改选项值的数量,这也将反映每个日期时间项的存在 .
注意:如果您只想配置内容选项,但仍使用当前区域设置,则为第一个参数传递
null
将导致错误 . 请改用undefined
.对于不同的语言:
"en-US": 英语
"hi-IN": 对于印地语
"ja-JP": 日语
您可以使用更多语言选项 .
例如
您也可以将
toLocaleString()
方法用于相同目的 . 唯一的区别是此功能提供了不传递任何选项的时间 .参考文献:
toLocaleString()
toLocaleDateString()
如果你想要一个简短的,人类可读的功能 - 这很容易调整,以适应你 .
timeStamp 参数是1970年以来的毫秒数 - 它由
new Date().getTime()
和许多其他设备返回...好的,我改变了主意 . 我为零填充添加了一个额外的功能 . 诅咒!
您可以编辑数组
monthNames
以使用Jan,Feb,Mar等 .任何人都在寻找一个非常简单的ES6解决方案来复制,粘贴和采用:
这是我刚刚编写的一些代码,用于处理我正在处理的项目的日期格式 . 它模仿PHP日期格式化功能以满足我的需求 . 随意使用它,它只是扩展已存在的Date()对象 . 这可能不是最优雅的解决方案,但它可以满足我的需求 .
@Sébastien - 替代所有浏览器支持
文件:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
Sugar.js具有对Date对象的出色扩展,包括Date.format方法 .
文档中的示例:
我想你可以使用 non-standard Date方法
toLocaleFormat(formatString)
formatString: C中strftime()函数所需格式的格式字符串 .
References:
tolocaleformat
strftime
OK ,我们有一个名为 Intl 的东西,这对于在JavaScript中格式化日期非常有用:
您的日期如下:
并使用下面的新Date()更改为Date:
现在你可以使用 locales 列表以任何方式格式化它,如下所示:
如果您确实需要上面提到的格式,您可以:
结果将是:
有关 ECMAScript Internationalization API (Intl) 的更多详细信息,请访问here .
自定义格式化功能:
对于固定格式,一个简单的功能可以完成工作 . 以下示例生成国际格式YYYY-MM-DD:
OP格式可以生成如下:
注意:然而,这通常不是一个好主意扩展JavaScript标准库(例如,通过将此函数添加到Date的原型) .
更高级的功能可以基于格式参数生成可配置输出 .
如果要编写格式化函数太长,那么就会有很多库 . 其他一些答案已经列举了它们 . 但是,越来越多的依赖关系也会与之相反 .
标准ECMAScript格式化函数:
从最新版本的ECMAScript开始,
Date
类具有一些特定的格式化函数:注意:可以从那些格式>生成自定义输出
示例摘要:
如果您需要使用纯JavaScript快速格式化日期,请使用
getDate
,getMonth + 1
,getFullYear
,getHours
和getMinutes
:或者,如果您需要用零填充:
在现代浏览器 (*) 中,您可以这样做:
如果今天执行输出(2016年1月24日):
(*) According to MDN,"modern browsers"表示Chrome 24,Firefox 29,Internet Explorer 11,Edge 12,Opera 15和Safari nightly build .
不使用任何外部库的JavaScript解决方案:
简单的JavaScript是小型onetimers的最佳选择 .
另一方面,如果您需要更多日期,MomentJS是一个很好的解决方案 .
For example:
如果您在代码中使用jQuery UI,则会有一个名为
formatDate()
的内置函数 . 我用这种方式来格式化今天的日期:你可以看到many other examples of formatting date in the jQuery UI documentation .
试试这个:
使用ECMAScript Edition 6(ES6 / ES2015)字符串模板:
如果您需要更改分隔符:
这是我为我的npm插件实现的方式
我们有很多解决方案,但我认为其中最好的是Moment.js . 所以我个人建议使用Moment.js进行日期和时间操作 .
这是一个完全符合您要求的脚本
https://github.com/UziTech/js-date-format
使用date.format library:
收益:
dateformat on npm
http://jsfiddle.net/phZr7/1/
有关developer.mozilla.org的更多文档