JavaScript - 从日期对象中删除毫秒

16

我正在尝试获取下一个星期日的日期(并将时间设置为上午9点):

var sun = new Date();
sun.setDate(sun.getDate() + (7 - sun.getDay()));
sun.setHours(9);
sun.setMinutes(0);
sun.setSeconds(0);
console.log(sun.toISOString());

这是我得到的内容:

  2018-11-04T09:00:00.722Z

我不需要的唯一事情是 .722 (API 不允许这个)

2018-11-04T09:00:00Z

我怎样才能移除掉“.722”这一部分?


@Pointy 那个评论应该是一个答案(在我看来是最好的答案) - D. Ben Knoble
@D.BenKnoble 我在寻找一个重复的东西。 - Pointy
5个回答

15
尝试使用 toISOString()将时间戳转换为字符串,并用.拆分字符串,使用String.prototype.split()方法,获取索引为 0 的值并连接字符串字面量Z。这样可以忽略包含毫秒值的第1个索引。希望这有所帮助 :)

var sun = new Date();
sun.setDate(sun.getDate() + (7 - sun.getDay()));
sun.setHours(9);
sun.setMinutes(0);
sun.setSeconds(0);
console.log(sun.toISOString().split('.')[0]+"Z");


@Wasteland 不用谢。很高兴能对你有所帮助。祝你好运。 - A l w a y s S u n n y
@Wasteland 没有必要这样做,而不是像设置分钟和秒钟一样将毫秒设置为零。 - Pointy
@don'tangryme,如果API不接受三个零(这意味着它无法正确解析日期格式),那么你是对的。 - Pointy
1
是的,正如 OP 指出的那样 *(API 不会接受这个)*,这就是为什么我用分割方式发布帖子的原因,否则我也会使用 setMIlliseconds(0)。谢谢。 - A l w a y s S u n n y

7

一种选项可能是在生成时间戳字符串后对其进行正则表达式替换:

var ts = "2018-11-04T09:00:00.722Z";
console.log(ts);
ts = ts.replace(/\.\d+/, "");
console.log(ts);


4

您可以在日期对象上使用setMilliseconds方法,设置所需的毫秒数。

var sun = new Date();
sun.setDate(sun.getDate() + (7 - sun.getDay()));
sun.setHours(9);
sun.setMinutes(0);
sun.setSeconds(0);
sun.setMilliseconds(0);
console.log(sun.toISOString());

示例输出:

2022-06-12T13:00:00.000Z

2
那样仍然会打印出来。 - Ivar

1
另一个选项:
var date = new Date();
date.setMilliseconds(0);
var dateISOString = date.toISOString().replace(".000Z", "Z");

console.log(dateISOString);

输出:

2021-06-16T10:08:41Z


1

这是毫秒,您可以像下面这样删除它。此外,您也可以仅使用 .setHours() 删除分钟和秒。

var sun = new Date();
sun.setDate(sun.getDate() + (7 - sun.getDay()));
sun.setHours(9,0,0,0)
console.log(sun.toISOString().slice(0,-5) + 'Z');


MS有时候可能会出现在点号后面,我不建议使用切片。 - MakeLoveNotWar
如果是这种情况,那么“split”就是合适的。 - Nitish Narang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接