从日期转换为ISO字符串中删除秒/毫秒

tes*_*123 27 javascript date isodate momentjs

我有一个我想要的日期对象

  1. 删除miliseconds /或设置为0
  2. 删除秒/或设置为0
  3. 转换为ISO字符串

例如:

var date = new Date();
//Wed Mar 02 2016 16:54:13 GMT-0500 (EST)

var stringDate = moment(date).toISOString();
//2016-03-02T21:54:13.537Z
Run Code Online (Sandbox Code Playgroud)

但最终我真正想要的是

stringDate = '2016-03-02T21:54:00.000Z'
Run Code Online (Sandbox Code Playgroud)

jsz*_*ody 33

虽然这很容易通过简单的javascript解决(请参阅RobG的回答),但我想向您展示momentjs解决方案,因为您将问题标记为momentjs:

moment().seconds(0).milliseconds(0).toISOString();
Run Code Online (Sandbox Code Playgroud)

这为您提供了当前的日期时间,没有秒或毫秒.

工作示例:http://jsbin.com/bemalapuyi/edit?html,js,output

来自文档:http://momentjs.com/docs/#/get-set/

  • @spierala 是的,我知道,但那是 2016 年 (5认同)

Rob*_*obG 32

不需要库,只需将秒和毫秒设置为零并使用内置的toISOString方法:

var d = new Date();
d.setSeconds(0,0);
document.write(d.toISOString());
Run Code Online (Sandbox Code Playgroud)

注意:IE 8及更低版本不支持toISOString ,MDN上有一个pollyfil.

  • @ wuno-如果省略时区,它将被视为"本地".如果您希望它为UTC,请始终包含"Z".至于毫秒,它们是ECMA-262所要求的,所以应该始终在那里.如果有疑问,请使用正则表达式:`date.toISOString().replace(/ \.\ d + Z /,'Z')`应删除任何小数秒部分. (4认同)
  • 但这仍然显示出毫升.有没有办法在没有库和没有拼接或某种类型的正则表达式的情况下删除millis?我很惊讶我们不能像PHP那样按照我们想要的方式格式化日期对象. (3认同)

Abh*_*yer 9

执行此操作的非库正则表达式:

new Date().toISOString().replace(/.\d+Z$/g, "Z");
Run Code Online (Sandbox Code Playgroud)

这只会减少不必要的部分。不希望四舍五入。


Jim*_*ane 7

这里有点晚了,但现在你可以:

var date = new Date();

这个obj有:

date.setMilliseconds(0);

date.setSeconds(0);

然后toISOString()像你一样打电话,你会没事的.

没有时刻或其他deps.

  • 这会将秒和毫秒值设置为 0,但不会将它们从字符串中删除。 (3认同)

H6.*_*H6. 5

Luxon 可能是你的朋友

您可以将milliseconds 设置为,然后使用Luxon0抑制毫秒。suppressMilliseconds

DateTime.now().toUTC().set({ millisecond: 0 }).toISO({
  suppressMilliseconds: true,
  includeOffset: true,
  format: 'extended',
}),
Run Code Online (Sandbox Code Playgroud)

导致例如

2022-05-06T14:17:26Z


也可以抑制秒数:

  const now = DateTime.now();
  console.log("now as TS", now.toMillis());
  const x = now.toUTC().set({ millisecond: 0, second: 0 }).toISO({
    includeOffset: true,
    format: "extended"
  });

  console.log("stripped as ISO", x);
  console.log("stripped as TS", DateTime.fromISO(x).toMillis());
Run Code Online (Sandbox Code Playgroud)

这是一个交互式示例(CodeSandbox): https://codesandbox.io/s/angry-cerf-gl9nsc ?file=/src/index.js