javascript日期&时间加入

时间:2012-07-20 10:00:57

标签: javascript datetime

我有两个日期变量,如下面的

startDateDate个实例,其值为Tue Jul 17 2012 00:00:00 GMT+0530 (IST)

startTimeString,其值为"11:30 AM"

现在我需要的是加入上述日期和时间。时间,为Date

startDateTime = Tue Jul 17 2012 11:30:00 GMT+0530 (IST)

我试过

new Date(startDate + " " + startDate)但输出invalid date

也尝试了post上显示的方式。但仍然无法正常工作。

3 个答案:

答案 0 :(得分:4)

如果startTime采用明确定义的格式,您可以随时解析setHours,然后使用setMinutesvar 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

......或类似的东西。

请注意,关键是你说DateDate个实例。以上假设我们在JavaScript环境的时区内工作,而不是跨区域工作。如果您首先使用日期字符串,并且该字符串指定了JavaScript环境时区以外的时区,然后您通过new Date("Tues Jul....")将其转换为Date,然后您必须确保调整结果setUTCHours以使用环境的本地时间或UTC;如果您将其调整为UTC,则使用上面的setUTCSecondssetHours代替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))