我想获得一个日期对象,它比另一个日期对象晚30分钟。我如何用JavaScript做到这一点?


当前回答

我觉得这里的许多答案都缺乏创造性的成分,这是时间旅行计算非常需要的。我提出了30分钟时间翻译的解决方案。

(这里jsfiddle)

function fluxCapacitor(n) {
    var delta,sigma=0,beta="ge";
    (function(K,z){

        (function(a,b,c){
            beta=beta+"tT";
            switch(b.shift()) {
                case'3':return z('0',a,c,b.shift(),1);
                case'0':return z('3',a,c,b.pop());
                case'5':return z('2',a,c,b[0],1);
                case'1':return z('4',a,c,b.shift());
                case'2':return z('5',a,c,b.pop());
                case'4':return z('1',a,c,b.pop(),1);
            }
        })(K.pop(),K.pop().split(''),K.pop());
    })(n.toString().split(':'),function(b,a,c,b1,gamma){
       delta=[c,b+b1,a];sigma+=gamma?3600000:0; 
       beta=beta+"im";
    });
    beta=beta+"e";
    return new Date (sigma+(new Date( delta.join(':')))[beta]());
}

其他回答

简单地,你可以在momnet库中使用这段代码:

console.log(moment(moment()).add(30,"minutes").format('MM/DD/YYYY hh:mm:ss'));

没有实用程序的一行程序:

new Date(+new Date() + 60000*15) // +15 minutes

停止使用Moment.js

正如其他优秀答案所建议的那样,在大多数情况下,处理日期时最好使用库。然而,重要的是要知道,自2020年9月起,Moment.js被认为是遗留的,不应再用于新项目。

引用Moment在官方文件中的声明:

我们不希望在未来的新项目中使用Moment。[…我们现在通常认为Moment是一个处于维护模式的遗留项目。它还没死,但已经完成了。

现代图书馆

以下是Moment推荐的替代方案。

勒克桑

《Luxon》可以看作是《Moment》的演变。作者Isaac Cambron是Moment的长期贡献者。请阅读卢克松为什么存在?以及Luxon文档中的For Moment用户页面。

locale:提供的Intl 时区:提供国际时区

import {DateTime} from 'luxon'

function addMinutes(date, minutes) {
    return DateTime.fromJSDate(date).plus({minutes}).toJSDate()
}

Day.js

Day.js被设计成一个极简的Moment.js替代品,使用类似的API。它不是一个临时的替代品,但如果你习惯了使用Moment的API,想要快速移动,可以考虑使用Day.js。

区域设置:可以单独导入的自定义数据文件 时区:国际提供,通过一个插件

import dayjs from 'dayjs'

function addMinutes(date, minutes) {
    return dayjs(date).add(minutes, 'minutes').toDate()
}

日期-fns

Date-fns提供了一系列用于操作JavaScript Date对象的函数。要了解更多详细信息,请滚动到date-fns主页上的“为什么是date-fns?”

区域设置:可以单独导入的自定义数据文件 时区:通过单独的配套库提供了Intl

import {addMinutes} from 'date-fns'

function addMinutesDemo(date, minutes) {
    return addMinutes(date, minutes)
}

js-Joda

js-Joda是Java的Three-Ten Backport的JavaScript端口,它是Java SE 8 Java的JSR-310实现的基础。包的时间。如果你熟悉java。time, joda time,或Noda time,你会发现js-Joda相当。

区域:通过附加模块自定义数据文件 时区:通过附加模块自定义数据文件

import {LocalDateTime, nativeJs, convert} from '@js-joda/core'

function addMinutes(date, minutes) {
    return convert(
        LocalDateTime.from(
            nativeJs(date)
        ).plusMinutes(minutes)
    ).toDate()
}

新日期() var newDateObj =新日期(); (+ 30 * 60 * 1000); 游戏机。log (newDateObj);

对于像我这样的懒人:

Kip的答案(从上面)在coffeescript中,使用“enum”,并对同一对象进行操作:

Date.UNIT =
  YEAR: 0
  QUARTER: 1
  MONTH: 2
  WEEK: 3
  DAY: 4
  HOUR: 5
  MINUTE: 6
  SECOND: 7
Date::add = (unit, quantity) ->
  switch unit
    when Date.UNIT.YEAR then @setFullYear(@getFullYear() + quantity)
    when Date.UNIT.QUARTER then @setMonth(@getMonth() + (3 * quantity))
    when Date.UNIT.MONTH then @setMonth(@getMonth() + quantity)
    when Date.UNIT.WEEK then @setDate(@getDate() + (7 * quantity))
    when Date.UNIT.DAY then @setDate(@getDate() + quantity)
    when Date.UNIT.HOUR then @setTime(@getTime() + (3600000 * quantity))
    when Date.UNIT.MINUTE then @setTime(@getTime() + (60000 * quantity))
    when Date.UNIT.SECOND then @setTime(@getTime() + (1000 * quantity))
    else throw new Error "Unrecognized unit provided"
  @ # for chaining