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

问题描述 投票:0回答:13

我有一个想要的日期对象

  1. 删除毫秒/或设置为 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

但我最终真正想要的是

stringDate = '2016-03-02T21:54:00.000Z'
javascript date momentjs isodate
13个回答
62
投票

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

var d = new Date();
d.setSeconds(0,0);
document.write(d.toISOString());

注意:IE 8及以下版本不支持toISOString,MDN上有pollyfil


59
投票

虽然使用普通 JavaScript 可以轻松解决这个问题(请参阅 RobG 的答案),但我想向您展示 Moment.js 解决方案,因为您将问题标记为“momentjs”:

moment().seconds(0).milliseconds(0).toISOString();

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

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

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


13
投票

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

new Date().toISOString().replace(/.\d+Z$/g, "Z");

这只会削减不必要的部分。预计不会进行四舍五入。


10
投票

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

var date = new Date();

这个对象有:

date.setMilliseconds(0);

date.setSeconds(0);

然后像你一样打电话给

toISOString()
,你就会没事的。

没有任何时刻或其他因素。


4
投票

纯 javascript 解决方案,用于修剪秒和毫秒(即删除,而不仅仅是设置为 0)。 JSPerf 说第二个函数更快。

function getISOStringWithoutSecsAndMillisecs1(date) {
  const dateAndTime = date.toISOString().split('T')
  const time = dateAndTime[1].split(':')
  
  return dateAndTime[0]+'T'+time[0]+':'+time[1]
}

console.log(getISOStringWithoutSecsAndMillisecs1(new Date()))

 
function getISOStringWithoutSecsAndMillisecs2(date) {
  const dStr = date.toISOString()
  
  return dStr.substring(0, dStr.indexOf(':', dStr.indexOf(':')+1))
}

console.log(getISOStringWithoutSecsAndMillisecs2(new Date()))


4
投票

这个版本适合我(不使用外部库):

var now = new Date();
now.setSeconds(0, 0);
var stamp = now.toISOString().replace(/T/, " ").replace(/:00.000Z/, "");

产生类似

的字符串
2020-07-25 17:45

如果您想要当地时间,请使用此变体:

var now = new Date();
now.setSeconds(0, 0);
var isoNow = new Date(now.getTime() - now.getTimezoneOffset() * 60000).toISOString();
var stamp = isoNow.replace(/T/, " ").replace(/:00.000Z/, "");

4
投票

Luxon 可以成为你的朋友

您可以将

millisecond
设置为
0
,然后使用
suppressMilliseconds
Luxon 抑制毫秒。

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

导致例如

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

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


2
投票

您可以使用 moment.js 中的 startOf() 方法来实现您想要的。

这是一个例子:

var date = new Date();

var stringDateFull = moment(date).toISOString();
var stringDateMinuteStart = moment(date).startOf("minute").toISOString();

$("#fullDate").text(stringDateFull);
$("#startOfMinute").text(stringDateMinuteStart);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.js"></script>
<p>Full date: <span id="fullDate"></span></p>
<p>Date with cleared out seconds: <span id="startOfMinute"></span></p>


2
投票
let date = new Date();
date = new Date(date.getFullYear(), date.getMonth(), date.getDate());

我希望这有效!


2
投票

要删除秒和毫秒值,这对我有用:

const date = moment()

// Remove milliseconds

console.log(moment.utc(date).format('YYYY-MM-DDTHH:mm:ss[Z]'))

// Remove seconds and milliseconds

console.log(moment.utc(date).format('YYYY-MM-DDTHH:mm[Z]'))

1
投票

我们也可以使用纯 JS 来完成此操作,但如果您正在使用更多功能/检查,那么使用库会对您有所帮助。

您可以使用 moment npm 模块并使用 split Fn 删除毫秒。

const moment = require('moment')

const currentDate = `${moment().toISOString().split('.')[0]}Z`;

console.log(currentDate) 

请参阅此处的工作示例: https://repl.it/repls/UnfinishedNormalBlock


1
投票

Date.prototype.toISOString()

始终为 24 或 27 个字符长(分别为 YYYY-MM-DDTHH:mm:ss.sssZ 或 ±YYYYYY-MM-DDTHH:mm:ss.sssZ)

toISOString
返回的最后8个字符始终是模式
:ss.sssZ
;因此向后切片可能更优雅:

new Date().toISOString().slice(0, -8) // 2023-04-18T12:23

现在您可以根据需要添加

:00.000z


0
投票

如果运气不好,请尝试此代码 它是 SQL 和 PHP 中日期时间的常用格式 例如 2022-12-25 19:13:55

console.log(new Date().toISOString().replace(/^([^T]+)T([^\.]+)(.+)/, "$1 $2") )

© www.soinside.com 2019 - 2024. All rights reserved.