从日期转换为ISO字符串

时间:2016-03-02 21:58:44

标签: javascript date momentjs isodate

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

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

    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'
    

9 个答案:

答案 0 :(得分:29)

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

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

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

答案 1 :(得分:26)

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

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

这为您提供当前的日期时间,无需秒或毫秒。

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

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

答案 2 :(得分:5)

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

var date = new Date();

这个obj有:

date.setMilliseconds(0);

date.setSeconds(0);

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

没有时刻或其他人。

答案 3 :(得分:2)

用于修剪秒和毫秒的纯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 :(得分:1)

您可以在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>

答案 5 :(得分:1)

我们也可以使用普通的JS来做到这一点,但是如果您要使用更多的功能/检查功能,则使用库可以为您提供帮助。

您可以使用moment npm模块,并使用拆分的Fn删除毫秒。

const moment = require('moment')

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

console.log(currentDate) 

在这里参考工作示例: https://repl.it/repls/UnfinishedNormalBlock

答案 6 :(得分:1)

此版本对我有效(无需使用外部库):

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

答案 7 :(得分:1)

非图书馆正则表达式可以做到这一点:

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

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

答案 8 :(得分:0)

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

我希望这行得通!