向日期(javascript)添加分钟无效日期

adding minutes to a date (javascript) invalid date

本文关键字:日期 分钟 无效 添加 javascript      更新时间:2023-09-26

我有这个函数在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

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

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

这是一个固定的原始副本,并实现了建议:

  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"

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

  1. 解析YYYY-MM-DD hh:mm:ss特定格式的字符串到Date对象。
  2. 增加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);

这将简单地改变Date值以增加15分钟。不要担心溢出-如果getMinutes返回55,设置70分钟将正确地增加1小时10分钟。

一个更好的解决方案

moments .js消除了所有关于解析变量的猜测,并为您提供了一个干净得多的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");