将分钟添加到日期(javascript)无效日期
我使用这个函数在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; } 脚本在我的大多数页面上都能
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)将认为它是无效日期。
- 将空格替换为
将允许解析日期,但如果这就是您所做的,那么Chrome将把它视为UTC,IE和Firefox将把它视为本地时间T
- 如果还添加了尾随的
(Z
),则所有浏览器都会将其解析为UTCYYYY-MM-DDThh:MM:ssZ
- 如果您想要一种所有浏览器都能识别为本地时间的格式,那么只有一种,而且它不是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:)