我有这个功能在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格式。
我试图用Date解析它,但这对我来说有点新鲜,我不确定我做错了什么。
答案 0 :(得分:1)
这是原始的固定副本,已实施建议:
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 :(得分:1)
这里有两个不同的问题,你应该在心理上分开:
YYYY-MM-DD hh:mm:ss
的特定格式的字符串解析为Date
个对象。Date
对象添加分钟。您应该知道,将字符串传递给Date
构造函数时的解析行为是特定于实现的,并且浏览器供应商之间的实现会有所不同。
-
)时,这些值将被视为UTC,并且当存在斜杠(-
)时,这些值将被视为对于时区的本地值。代码正在运行。T
而不是空格分隔时。 (YYYY-MM-DDThh:mm:ss
)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分钟。
Moment.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");