从 JS 日期对象获取 YYYYMMDD 格式的字符串?

IT技术 javascript date date-formatting
2021-01-21 06:19:51

我正在尝试使用 JS 将 adate object转换为YYYYMMDD格式的字符串难道还有比串联更简单的方法Date.getYear()Date.getMonth()Date.getDay()

6个回答

我经常使用的修改后的一段代码:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();
对于任何想要@Aidiakapi 修复的实际示例的人,我在这里创建了一个小提琴:jsfiddle.net/pcr8xbt5/1
2021-03-15 06:19:51
var mm = (this.getMonth() + 101).toStrung().substring(0, 2);
2021-03-23 06:19:51
如果你想有点分隔符: [this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
2021-03-23 06:19:51
您应该替换[1].length===2,因为不完全支持字符串上的索引器。请参阅此答案以了解原因。
2021-04-02 06:19:51
@9dan 不应该是 var mm = (this.getMonth() + 101).toString().substring(1, 3)
2021-04-06 06:19:51

我不喜欢添加到原型中。另一种选择是:

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;

如果您不需要rightNow周围变量,您可以将new Date包装并全部返回到一行中:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
2021-03-11 06:19:51
我想YYYYMMDDHHmmSSsss,所以我这样做: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");很简单,但应该封装。
2021-03-15 06:19:51
如果 10000 年的某个人使用您的“怀旧”代码,这将失败。
2021-04-05 06:19:51
这通常不起作用,因为 Date.toISOString() 创建了一个 UTC 格式的日期,因此可以根据时区跳转日期边界。例如在 GMT+1 中: (new Date(2013,13, 25)).toISOString() == '2013-12-24T23:00:00.000Z'
2021-04-07 06:19:51
处理时区的建议改进。 rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
2021-04-07 06:19:51

您可以使用该toISOString功能:

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

它会给你一个“yyyy-mm-dd”格式。

也许我的创造力被打破了@Miguel,但我想不出会发生这种情况的情况。你介意提供一个例子吗?
2021-03-11 06:19:51
不要使用这个。我曾经有过这种感觉,因为您可能接近 UTC,它会经常工作并且偶尔会失败。
2021-03-16 06:19:51
在某些情况下,这将不包括正确的一天,因为时区日光等......
2021-03-17 06:19:51
如果您在 +1 时区,并且有一个日期 [2015-09-01 00:00:00 GMT+1],那么 toISOString() 方法将返回字符串 '2015-08-31T23:00:00.000Z ' 因为日期在被字符串化之前被转换为 UTC/0-offset。
2021-03-18 06:19:51
因 GMT 不同而失败
2021-03-28 06:19:51

Moment.js可以成为你的朋友

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
好吧,它确实在我的 app.js 中添加了 40kb(缩小,非 gZip),但我选择了它,谢谢:)。
2021-03-13 06:19:51
迄今为止的最佳答案!
2021-03-14 06:19:51
我不知道为什么我一直回避这个答案,但仍然回来确认这是完美的解决方案。Moment.js是必须的图书馆
2021-03-15 06:19:51
你可以让它更容易: var formattedDate = moment().format('YYYYMMDD');
2021-03-20 06:19:51
我什至都懒得等到我不可避免地需要时刻了,我只是在项目开始时添加它:)
2021-04-03 06:19:51
new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'
最好的灵魂。
2021-03-25 06:19:51
出于某种原因,当我在美国东海岸运行公式时,需要添加时间(即使是 00:00)以使转换不会跳过一天。一旦我这样做了,它就开始可靠地工作。我最喜欢的是它可以采用多种格式的输入日期,所以我不必再担心了。 new Date('Sun Mar 31 2019 00:00:00.000').toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
2021-04-02 06:19:51