如何解析 javascript 日期中的“30-06-2017 07:55 pm”
How to parse "30-06-2017 07:55 pm" in Date in javascript
我的 JSP form
中有以下 bootstrap 日期选择器元素:
<tr>
<td>
<form:label path="bookStartTime" title="Booking Start Time" class="control-label">Booking Start Time
<font color="red"> *</font>
</form:label>
</td>
<td>
<div class='input-group date' id='datetimepicker6'>
<form:input path="bookStartTime" title="Booking Start time" class="form-control input-sm" placeholder="DD-MM-YYYY hh:mm am/pm" />
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</td>
</tr>
我在下面使用了 javascript 到 select 这种格式的时间戳 DD-MM-YYYY hh:mm a
:
$(function () {
$('#datetimepicker6').datetimepicker({format: 'DD-MM-YYYY hh:mm a'});
$('#datetimepicker6').data("DateTimePicker").minDate(new Date());
});
现在我需要将来自日期选择器的 selected 日期与来自后端(数据库)的许多具有相同格式的日期进行比较。
问题是在 javascript 中我无法解析这种 DD-MM-YYYY hh:mm a
日期格式。
我尝试了很多方法,moment.js 也尝试了很多方法,但在很长一段时间后都没有成功。
如能提供一些links/references或解决方案就太好了。谢谢!
您可以手动解析日期字符串,因此您应该使用带年月日参数的 Date 构造函数:
// parse a date in yyyy-mm-dd format
function parseDate(date) {
var parts = date.split('-');
/* new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]]) */
var newdate = new Date(parts[0], parts[1]-1, parts[2]);
return newdate;
}
对于格式为 DD-MM-YYYY hh:mm a
的日期字符串,最好的选择是使用正则表达式,以正确的顺序从字符串中获取所有数字并将它们传递给 Date()
构造函数以获取日期对象。
例如:
var x = '30-06-2017 20:50 pm';
// returns array of matched 2 and 4 digit numbers
var arr = x.match(/([0-9]{2,4})/g);
// arr equals ['30', '06', '2017', '20', '50']
var dateObj = new Date(arr[2], arr[1], arr[0], arr[3], arr[4]);
仅此而已,dateObj
就是您要查找的内容。希望这有帮助。
我从@Raunaqss 的回答中找到了更正确的解决方案。
var x=$("#bookStartTime").val();
var arr = x.match(/([0-9]{2,4})/g);
if(x!=null && x!="undefined"){
var splitX=x.split('');
var ampm= splitX[splitX.length-2]+splitX[splitX.length-1];
}
if(ampm=='pm'){
arr[3]=parseInt(arr[3])+12;
}
var dateObj = new Date(arr[2], arr[1]-1, arr[0], arr[3], arr[4], 0, 0);
alert(dateObj);
我刚刚检查了时间戳值末尾是否有pm
。如果存在,则只需将 12
添加到 hours
.
我的 JSP form
中有以下 bootstrap 日期选择器元素:
<tr>
<td>
<form:label path="bookStartTime" title="Booking Start Time" class="control-label">Booking Start Time
<font color="red"> *</font>
</form:label>
</td>
<td>
<div class='input-group date' id='datetimepicker6'>
<form:input path="bookStartTime" title="Booking Start time" class="form-control input-sm" placeholder="DD-MM-YYYY hh:mm am/pm" />
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</td>
</tr>
我在下面使用了 javascript 到 select 这种格式的时间戳 DD-MM-YYYY hh:mm a
:
$(function () {
$('#datetimepicker6').datetimepicker({format: 'DD-MM-YYYY hh:mm a'});
$('#datetimepicker6').data("DateTimePicker").minDate(new Date());
});
现在我需要将来自日期选择器的 selected 日期与来自后端(数据库)的许多具有相同格式的日期进行比较。
问题是在 javascript 中我无法解析这种 DD-MM-YYYY hh:mm a
日期格式。
我尝试了很多方法,moment.js 也尝试了很多方法,但在很长一段时间后都没有成功。
如能提供一些links/references或解决方案就太好了。谢谢!
您可以手动解析日期字符串,因此您应该使用带年月日参数的 Date 构造函数:
// parse a date in yyyy-mm-dd format
function parseDate(date) {
var parts = date.split('-');
/* new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]]) */
var newdate = new Date(parts[0], parts[1]-1, parts[2]);
return newdate;
}
对于格式为 DD-MM-YYYY hh:mm a
的日期字符串,最好的选择是使用正则表达式,以正确的顺序从字符串中获取所有数字并将它们传递给 Date()
构造函数以获取日期对象。
例如:
var x = '30-06-2017 20:50 pm';
// returns array of matched 2 and 4 digit numbers
var arr = x.match(/([0-9]{2,4})/g);
// arr equals ['30', '06', '2017', '20', '50']
var dateObj = new Date(arr[2], arr[1], arr[0], arr[3], arr[4]);
仅此而已,dateObj
就是您要查找的内容。希望这有帮助。
我从@Raunaqss 的回答中找到了更正确的解决方案。
var x=$("#bookStartTime").val();
var arr = x.match(/([0-9]{2,4})/g);
if(x!=null && x!="undefined"){
var splitX=x.split('');
var ampm= splitX[splitX.length-2]+splitX[splitX.length-1];
}
if(ampm=='pm'){
arr[3]=parseInt(arr[3])+12;
}
var dateObj = new Date(arr[2], arr[1]-1, arr[0], arr[3], arr[4], 0, 0);
alert(dateObj);
我刚刚检查了时间戳值末尾是否有pm
。如果存在,则只需将 12
添加到 hours
.