Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将分钟添加到日期(javascript)无效日期_Javascript_Date - Fatal编程技术网

将分钟添加到日期(javascript)无效日期

将分钟添加到日期(javascript)无效日期,javascript,date,Javascript,Date,我使用这个函数在javascript中为日期添加分钟 function addMinutes(date, minutes) { var DateObject = new Date(date); var modifiedDate = DateObject.getTime() + minutes * 60000; return date = modifiedDate; } 脚本在我的大多数页面上都能

我使用这个函数在javascript中为日期添加分钟

  function addMinutes(date, minutes) {
            var DateObject = new Date(date);
            var modifiedDate =  DateObject.getTime() + minutes * 60000;
            return date = modifiedDate;
        }   
脚本在我的大多数页面上都能完美运行,但在我正在处理的当前页面上,我有一个日期:
2014-06-07 01:00:00

这只适用于谷歌浏览器。。我发现IE/Safari等浏览器无法使用YYYY/MM/DD格式


我试着用日期来解析它,但这对我来说有点新,我不确定我做错了什么。

这里是一份orig的固定副本,其中包含实施的建议:

  function addMinutes(date, minutes) {
            var DateObject = new Date(String(date).replace(/\ /g,"T")+"Z"),
            modifiedDate = DateObject.getTime() + 
                 (minutes* 60000) + 
                 (new Date(DateObject).getTimezoneOffset()*60*1000) ;
            return date = modifiedDate;
   }   

new Date(addMinutes("2014-06-07 01:00:00", 15)).toLocaleString();
// shows: "6/7/2014 1:15:00 AM"

这里有两个不同的问题,你应该在思想上分开:

  • 将特定格式为
    YYYY-MM-DD hh:MM:ss
    的字符串解析为
    Date
    对象
  • 将分钟添加到
    日期
    对象
  • 解析字符串 您应该知道,将字符串传递给
    Date
    构造函数时的解析行为是特定于实现的,并且不同浏览器供应商的实现有所不同

    • 通常,当出现破折号(
      -
      )时,值被视为UTC,当出现斜线(
      -
      )时,值被视为代码运行所在时区的本地值
    • 但是,这仅适用于时间不存在的情况,或者日期和时间组件用
      T
      而不是空格分隔的情况。(
      YYYY-MM-DDThh:MM:ss
    • 当使用一个空间来分隔日期和时间组件时,一些浏览器(如Chrome)将它视为本地时间,但其他浏览器(如IE和Firefox)将认为它是无效日期。
    • 将空格替换为
      T
      将允许解析日期,但如果这就是您所做的,那么Chrome将把它视为UTC,IE和Firefox将把它视为本地时间
    • 如果还添加了尾随的
      Z
      YYYY-MM-DDThh:MM:ssZ
      ),则所有浏览器都会将其解析为UTC
    • 如果您想要一种所有浏览器都能识别为本地时间的格式,那么只有一种,而且它不是ISO标准:
      YYYY/MM/DD hh:MM:ss
      。因此,您可以考虑:

      var s = "2014-06-07 01:00:00";
      var dt = new Date(s.replace(/-/g,'/'));
      
    添加分钟数 这要简单得多:

    dt.setMinutes(dt.getMinutes() + 15);
    
    这将简单地改变
    日期
    值,增加15分钟。不要担心溢出-如果
    getMinutes
    返回55,设置70分钟将正确地增加1小时10分钟

    更好的解决方案 消除了所有关于解析变体的猜测,并为您提供了一个更干净的API。考虑:

    // parse a string using a specific format
    var m = moment("2014-06-07 01:00:00","YYYY-MM-DD HH:mm:ss");
    
    // adding time
    m.add(15, 'minutes');
    
    // format the output as desired, with lots of options
    var s = m.format("L h:mm:ss A");
    

    可能会有帮助:),该线程上的某个人建议使用moment.js库,该库看起来非常有希望使用新日期(String(Date).replace(/\/g,“T”)+“Z”);在所有支持toISOString()的浏览器中都可以使用。@dandavis它确实可以使用,但我认为时区出现了一些问题。我有一个默认时区,所以不需要复杂的东西。当我将15分钟添加到01:00时,它将返回2014年6月7日星期六03:00:00 GMT+0200(CEST)。如何获得01:15?var modifiedDate=DateObject.getTime()+(15*60000)+(new Date().getTimezoneOffset()*60*1000)@dandavis太棒了!你能把它作为答案贴出来吗?因为它解决了我的问题小心-你得到的是当前日期的偏移量,由于夏令时的原因,它可能与所讨论的日期的偏移量不同。@MattJohnson:说得好,代码经过调整,通过将日期输入偏移量获取器来处理这个问题……感谢您对真实问题的详细回答和解释。将使用力矩js:)