使用moment将当前时间转换为毫秒

4
假设我有这段时间
'2018-08-03T15:53:57.000Z'

我需要将时间部分转换为毫秒

我尝试了这个方法,但是它没有起作用并且抛出了错误

moment.utc("2018-08-03T15:53:57.000Z").format('HH:mm:ss').milliseconds()

错误

TypeError: (0 , _moment2.default)(...).format(...).milliseconds is not a function

有人能帮忙吗,我该如何将时间转换为毫秒?

谢谢!


@WilliamChong 更新了问题。 - Profer
1
1533297237000 - Mukesh Verma
1
所以15:53:57.000Z中的Z根本没有被使用吗?如果你执行new Date('2018-08-03T15:53:57.000Z'),除非你碰巧在英国,否则你很可能会得到不同的时间。 - HMR
@HMR 只是为了澄清,'2018-08-03T15:53:57.000Z' 实际上是本地时间 '2018-08-03T16:53:57.000',因为我们在三月到十月之间观察夏令时 ;) - phuzi
开始或结束夏令时的日子怎么办?您想包括偏移量还是忽略它? - phuzi
显示剩余8条评论
4个回答

6

如果你需要获取毫秒数,可以按照如下方式进行操作:

const ms = moment.utc("2018-08-03T15:53:57.000Z").valueOf()

编辑: 以上是使用Moment进行操作的方法,因为您特别提到“使用Moment”。
您也可以使用纯粹的JS而不使用库,如下所示:
const date = new Date("2018-08-03T15:53:57.000Z");

.valueOf()

date.valueOf() // 1533311637000

.getTime()

date.getTime() // 1533311637000

1
不需要使用moment来完成这个操作。日期字符串可以通过原生JS进行解析。
let date = new Date('2018-08-03T15:53:57.000Z');

获取此日期的时间戳(以毫秒为单位)的方法是;
let millis = date.getTime();

由于一天有86400秒(24*60*60),因此一天有86,400,000毫秒,我们可以使用除以这个数字后的余数来得到时间部分表示的毫秒数。以下是该语句:

let millisToday = millis % 86400000;

更新

现在使用getTime()代替valueOf(),因为它是获取日期对象时间戳的“正确”方法。


我建议使用 getTime - HMR
@HMR能否详细说明一下为什么?它与valueOf()有何不同之处? - phuzi
1
getTime 是专门用来获取自纪元以来的毫秒数的函数,而 valueOf 则是一般用于类型转换的函数。 - HMR
更多信息请参考类型强制转换的示例:1 - {valueOf:()=>1} 的结果为0,而 1 - {valueOf:()=>2} 的结果为-1。 - HMR

1
如果我向不同时区的某人发送 new Date().toISOString(),那么这个人的时间将会有所不同。如果我要求那个人在他们的时间下午1点与我进行Skype通话,这可能意味着在我的当地时间下午6点。
因此,如果发送日期字符串的人来自英国并向我发送 ...T13:00.000Z,那实际上对我来说是下午6点。
以下是如何正确地从您当地时间转换的日期的午夜获取毫秒级别的时间:

const date = new Date(2007, 1, 1, 0, 0, 2).toISOString();
console.log('date:',date);
console.log('date in your local time:',new Date(date).toString());
const millisecondsFromMidNight = (date) => {
  var dateObject = new Date(date);
  return (
    dateObject.getTime() -
    new Date(
      dateObject.getFullYear(),
      dateObject.getMonth(),
      dateObject.getDate(),
      0,
      0,
      0,
      0,
    ).getTime()
  );
};
console.log(millisecondsFromMidNight(date));

夏令时开始的示例:

var minutesFromMidnight = (date) => {
  var dateObject = new Date(date);
  console.log('date:', date);
  console.log(
    'date in your local time:',
    dateObject.toString(),
  );
  return (
    dateObject.getTime() -
    new Date(
      dateObject.getFullYear(),
      dateObject.getMonth(),
      dateObject.getDate(),
      0,
      0,
      0,
      0,
    ).getTime()
  );
};

console.log(
  minutesFromMidnight('2018-10-28T00:59:00.000Z') / 60000,
);
console.log(
  minutesFromMidnight('2018-10-28T01:01:00.000Z') / 60000,
);


如果在相关日期进行夏令时调整,这种方法可能会失败。例如,在英国,2018年3月25日01:00开始实行夏令时,因此时间变为“2018-03-25T02:00:00+01:00”,但午夜是“2018-03-25T00:00:00+00:00”。虽然距离午夜只有一个小时,但我认为你的答案将计算为2。不知道这是否超出了OP想要的细节级别! - phuzi
@phuzi 我已经添加了一个示例,午夜时刻有一个DST值,两分钟后的另一个值不在DST之内(西欧),并且它可以正确地工作。 - HMR
@HMR感谢你的帮助,但我认为phuzi的回答是正确的。 - Profer
如果您在英国且当前不处于夏令时,则是这样。 - HMR
DST 是什么意思? - Profer
显示剩余4条评论

-1

这个函数是moment().milliseconds()

不是format().milliseconds


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