我有两个日期变量,如下面的
startDate
是Date
个实例,其值为Tue Jul 17 2012 00:00:00 GMT+0530 (IST)
startTime
是String
,其值为"11:30 AM"
现在我需要的是加入上述日期和时间。时间,为Date
。
startDateTime
= Tue Jul 17 2012 11:30:00 GMT+0530 (IST)
我试过
new Date(startDate + " " + startDate)
但输出invalid date
。
也尝试了post上显示的方式。但仍然无法正常工作。
答案 0 :(得分:4)
如果startTime
采用明确定义的格式,您可以随时解析setHours
,然后使用setMinutes
和var startDateTime;
var parts = /^(\d+):(\d+) (AM|PM)$/.exec(startTime);
if (parts) {
hours = parseInt(parts[1], 10);
minutes = parseInt(parts[2], 10);
if (parts[3] === "PM" && hours !== 12) {
hours += 12;
}
else if (parts[3] === "AM" && hours === 12) {
hours = 0;
}
if (!isNaN(hours) && !isNaN(minutes)) {
startDateTime = new Date(startDate.getTime());
startDateTime.setHours(hours);
startDateTime.setMinutes(minutes);
}
}
:Live example | source
startDate
......或类似的东西。
请注意,关键是你说Date
是Date
个实例。以上假设我们在JavaScript环境的时区内工作,而不是跨区域工作。如果您首先使用日期字符串,并且该字符串指定了JavaScript环境时区以外的时区,然后您通过new Date("Tues Jul....")
将其转换为Date
,然后您必须确保调整结果setUTCHours
以使用环境的本地时间或UTC;如果您将其调整为UTC,则使用上面的setUTCSeconds
和setHours
代替setSeconds
和{{1}}。同样,如果您的起点是日期 string ,那么这只是一个问题,并且该字符串指定与上面代码运行的时区的不同的时区。
答案 1 :(得分:2)
你可以这样做:
var theDate = new Date("Tue Jul 17 2012 00:00:00 GMT+0530 (IST)");
var theTime = "11:30 AM";
var hours = theTime .substr(0,2);
var minutes = theTime .substr(3,2);
var amOrPm = theTime .substr(6,2);
if (hours < 12 && "PM" == amOrPm) {
hours = +hours + 12;
}
theDate.setHours(hours);
theDate.setMinutes(minutes);
答案 2 :(得分:0)
尝试
new Date(startDate.toDateString() + " " + startTime)
这将Date
对象中的日期字符串与时间字符串组合在一起,并且应该为您提供有效日期。请注意,此会忽略您最初使用的时区,您可能需要再次添加" GMT+0530"
。
但是,由于您的日期字符串已经是时区偏好的(2012年7月16日,20:30:00 UTC),最好将它们一起添加,例如new Date(+startDate + milliseconds)
:
var startDate = new Date("Tue Jul 17 2012 00:00:00 GMT+0530");
var startTime = "11:30 AM";
return new Date(+startDate + +new Date("1 1 1970 "+startTime))