【问题标题】:Format date to MM/dd/yyyy in JavaScript [duplicate]在 JavaScript 中将日期格式化为 MM/dd/yyyy [重复]
【发布时间】:2012-07-20 11:14:23
【问题描述】:

我有一个类似'2010-10-11T00:00:00+05:30' 的日期格式。我必须使用 JavaScript 或 jQuery 格式化为 MM/dd/yyyy 。任何人都可以帮助我做同样的事情。

【问题讨论】:

  • 这是如何复制的,一个人问文档在哪里,另一个人如何将日期格式化为特定格式...?
  • 不知道为什么每个人总是为此添加字符串而不是使用toLocaleDateString,后者不那么笨拙:function getDate(str) {var ops = {year: 'numeric'}; ops.month = ops.day = '2-digit'; return new Date(str).toLocaleDateString(0, ops);}
  • @omikes 我无法让您的功能在 ServiceNow 平台上运行 var testGetDate = getDate('2010-10-11T00:00:00+05:30');。不知道为什么,但它适用于 jsconsole.com
  • 现在正确的解决方案是使用Intl.DateTimeFormat API

标签: javascript jquery


【解决方案1】:

试试这个;请记住,JavaScript 月份以 0 为索引,而天以 1 为索引。

var date = new Date('2010-10-11T00:00:00+05:30');
    alert(((date.getMonth() > 8) ? (date.getMonth() + 1) : ('0' + (date.getMonth() + 1))) + '/' + ((date.getDate() > 9) ? date.getDate() : ('0' + date.getDate())) + '/' + date.getFullYear());

【讨论】:

  • 在上面进行了编辑,以说明 javascript 月份从零开始的事实......在向用户显示数据时,您必须始终在月份中添加一个以获得准确的月份。
  • 这实际上不是 MM/dd/yyyy。那是 M/d/yyyy。您的日期需要前导零吗?
  • 如果使用角度,你可能要考虑:docs.angularjs.org/api/ng/filter/date
  • 同意这个答案是不正确的。它不会产生 mm/dd/yyyy。
  • 正确答案应该是 var result = ((date.getMonth().toString().length > 1) ? (date.getMonth() + 1) : ('0' + (date. getMonth() + 1))) + '/' + ((date.getDate().toString().length > 1) ? date.getDate() : ('0' + date.getDate())) + ' /' + date.getFullYear()
【解决方案2】:

所有其他答案都不能完全解决问题。他们打印格式为 mm/dd/yyyy 的日期,但问题是关于 MM/dd/yyyy。注意到细微的差别了吗? MM 表示如果月份是一位数,则前导零必须填充月份,因此它始终是两位数。

即而 mm/dd 是 3/31,MM/dd 是 03/31。

我创建了一个简单的函数来实现这一点。请注意,相同的填充不仅适用于月份,还适用于月份中的某一天,这实际上使得这个 MM/DD/yyyy:

function getFormattedDate(date) {
  var year = date.getFullYear();

  var month = (1 + date.getMonth()).toString();
  month = month.length > 1 ? month : '0' + month;

  var day = date.getDate().toString();
  day = day.length > 1 ? day : '0' + day;
  
  return month + '/' + day + '/' + year;
}

使用 String.padStart() 对 ES2017 进行更新,除 IE 外,所有主流浏览器都支持。

function getFormattedDate(date) {
    let year = date.getFullYear();
    let month = (1 + date.getMonth()).toString().padStart(2, '0');
    let day = date.getDate().toString().padStart(2, '0');
  
    return month + '/' + day + '/' + year;
}

【讨论】:

  • 返回 '2013/15/06' 代表 'Sat Jun 01 2013 00:00:00 GMT-0400 (Eastern Summer Time)'
  • @Ore4444,您在添加 1 之前将月份转换为字符串,这就是为什么 @Code Monkey 说您返回 15 而不是 6。应该是var month = (1 + date.getMonth()).toString();
  • getDay 返回星期几。不是您需要使用 getDate() 的日期
  • @Ankur:您可以使用 Moment.js 在提示的每个答案下复制您的评论,您可以提供代码如何与 Moment.js 一起使用..
  • 函数 getFormattedDate(date) { var start = new Date(date); var year = start.getFullYear(); var month = (1 + start.getMonth()).toString();月 = 月长度 > 1 ?月:'0' + 月; var day = start.getDate().toString();天 = day.length > 1 ?天:“0”+天;返回日 + '/' + 月 + '/' + 年; }
【解决方案3】:

符合 ISO 标准的 dateString

如果 dateString 符合 RFC282ISO8601
将字符串传递到Date Constructor:

const dateString = "2020-10-30T12:52:27+05:30"; // ISO8601 compliant dateString
const D = new Date(dateString);                 // {object Date}

从这里我们可以使用Date Getters提取所需的值:

D.getMonth() + 1  // 10 (PS: +1 since Month is 0-based)
D.getDate()       // 30
D.getFullYear()   // 2020

非标准日期字符串

如果是非标准日期字符串:
将字符串解构为已知部分,然后将变量传递给Date Constructor:

新日期(年、月索引[、日[、小时[、分钟[、秒[、毫秒]]]]])

const dateString = "30/10/2020 12:52:27";
const [d, M, y, h, m, s] = dateString.match(/\d+/g);

// PS: M-1 since Month is 0-based
const D = new Date(y, M-1, d, h, m, s);  // {object Date}


D.getMonth() + 1  // 10 (PS: +1 since Month is 0-based)
D.getDate()       // 30
D.getFullYear()   // 2020

【讨论】:

  • 你把你的日子和月份搞混了。 2010-10-11 将是 10/11/2010
  • 真正考虑使用像 Moment.js 这样的库。它将格式化为所需的结果:)
  • @RokoC.Buljan 如何在javascript中将“Month dd, yyyy”转换为“MM/dd/yyyy”?
  • Moment.js 对于简单的东西来说是巨大的。请尝试使用日期格式。我的 Webpack 构建时间缩短了 5 秒。
  • @EirikBirkeland 不错的建议。我滥用 moment 很多,因为它的 API 很好,甚至没有考虑绒毛的数量。
猜你喜欢
  • 2013-03-18
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多