如何格式化 JavaScript 日期

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

答案

使用toLocaleDateString()

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

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

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

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

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

对于不同的语言:

  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")); // 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

参考文献:

注意:以下是更好的答案。该答案写于 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 等。

使用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

npm 上的 dateformat

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

如果需要使用纯 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

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

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

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

自定义格式功能:

对于固定格式,只需一个简单的功能即可完成。以下示例生成国际格式 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 的字符串化器。

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 :日期的通用 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));

如果您已经在项目中使用 jQuery UI ,则可以通过以下方式进行操作:

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

// formatted will be 'Jul 8, 2014'

一些 datepicker 日期格式选项可在此处使用

我认为您可以只使用非标准的 Date 方法toLocaleFormat(formatString)

formatString:格式字符串,格式与 C 中的strftime()函数所期望的格式相同。

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

参考文献:

普通的 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

在现代浏览器(*)中 ,您可以执行以下操作:

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 每晚构建的版本