将 dd-mm-yyyy 字符串转换为日期
Convert dd-mm-yyyy string to date
我正在尝试使用以下方法将格式为 dd-mm-yyyy 格式的字符串转换为 JavaScript 中的日期对象:
var from = $("#datepicker").val();
var to = $("#datepickertwo").val();
var f = new Date(from);
var t = new Date(to);
("#datepicker").val()
包含格式为 dd-mm-yyyy 的日期。当我执行以下操作时,我得到"无效日期":
alert(f);
这是因为"-"符号吗?我怎样才能克服这个问题?
拆分为 "-">
将字符串解析为所需的部分:
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
使用正则表达式
var date = new Date("15-05-2018".replace( /('d{2})-('d{2})-('d{4})/, "$2/$1/$3"))
为什么不使用正则表达式?
因为你知道你将处理一个由三部分组成的字符串,用连字符分隔。
但是,如果您要在另一个字符串中查找相同的字符串,则正则表达式将是要走的路。
再使用
因为您在示例代码中多次执行此操作,并且可能在代码库中的其他位置执行此操作,因此请将其包装在一个函数中:
function toDate(dateStr) {
var parts = dateStr.split("-")
return new Date(parts[2], parts[1] - 1, parts[0])
}
用作:
var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)
或者,如果你不介意在你的函数中使用jQuery:
function toDate(selector) {
var from = $(selector).val().split("-")
return new Date(from[2], from[1] - 1, from[0])
}
用作:
var f = toDate("#datepicker")
var t = toDate("#datepickertwo")
现代 JavaScript
如果你能够使用更现代的JS,数组解构也是一个不错的选择:
const toDate = (dateStr) => {
const [day, month, year] = dateStr.split("-")
return new Date(year, month - 1, day)
}
正则表达式示例:
new Date( "13-01-2011".replace( /('d{2})-('d{2})-('d{4})/, "$2/$1/$3") );
另一种可能性:
var from = "10-11-2011";
var numbers = from.match(/'d+/g);
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);
匹配数字并重新排序
使用 moment.js 示例:
var from = '11-04-2017' // OR $("#datepicker").val();
var milliseconds = moment(from, "DD-MM-YYYY").format('x');
var f = new Date(milliseconds)
使用以下格式:myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00
var from = $("#datepicker").val();
var f = $.datepicker.parseDate("d-m-Y", from);
接受的答案有点错误
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
考虑日期选择器是否包含"77-78-7980",这显然不是有效的日期。这将导致:
var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z
这可能不是预期的结果。
其原因在MDN网站上进行了解释:
在 Date 作为具有多个参数的构造函数调用的情况下,如果值大于其逻辑范围(例如,提供 13 作为月份值或 70 作为分钟值(,则将调整相邻值。 例如
new Date(2013, 13, 1)
相当于new Date(2014, 1, 1)
。
解决问题的更好方法是:
const stringToDate = function(dateString) {
const [dd, mm, yyyy] = dateString.split("-");
return new Date(`${yyyy}-${mm}-${dd}`);
};
console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z
console.log(stringToDate('77-78-7980'));
// Invalid Date
这使您能够处理无效输入。
例如:
const date = stringToDate("77-78-7980");
if (date === "Invalid Date" || isNaN(date)) {
console.log("It's all gone bad");
} else {
// Do something with your valid date here
}
Date()
对象的括号内写一个日期,如下所示:
new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)
就我而言
new Date("20151102034013".replace(/('d{4})('d{2})('d{2})('d{2})('d{2})('d{2})/, "$1-$2-$3T$4:$5:$6"))
结果:2015 年 11 月 2 日星期一 04:40:13 GMT+0100 (CET(然后我使用 .getTime(( 来处理毫秒
您可以使用外部库来帮助您。
http://www.mattkruse.com/javascript/date/source.html
getDateFromFormat(val,format);
另请参阅:在 JavaScript 中解析 DateTime 字符串
你可以只:
var f = new Date(from.split('-').reverse().join('/'));
let dateString = '13-02-2021' //date string in dd-mm-yyyy format
let dateArray = dateString.split("-");
//dateArray[2] equals to 2021
//dateArray[1] equals to 02
//dateArray[0] equals to 13
// using template literals below
let dateObj = new Date(`${dateArray[2]}-${dateArray[1]}-${dateArray[0]}`);
// dateObj equals to Sat Feb 13 2021 05:30:00 GMT+0530 (India Standard Time)
//I'm from India so its showing GMT+0530
P.S:始终参考文档以获取基础知识,MDN或DevDocs
看看Datejs,了解所有这些与日期相关的小问题。你也可以通过parseDate函数来解决这个问题
你可以使用正则表达式。
var result = /^('d{2})-('d{2})-('d{4})$/.exec($("#datepicker").val());
if (result) {
from = new Date(
parseInt(result[3], 10),
parseInt(result[2], 10) - 1,
parseInt(result[1], 10)
);
}
new Date().toLocaleDateString();
就这么简单,只需将您的日期传递给 js Date 对象即可
- 将Javascript日期转换为ASP.NET日期格式
- 如何将日期转换为周名
- 如何将日期转换为标准格式
- Javascript/Json日期转换问题
- 根据浏览器位置,用JavaScript将输入的日期转换为UTC
- 如何在 java 脚本中将字符串日期转换为 GMT
- Javascript中的日期转换
- JavaScript 将日期转换为格式
- 将正常日期转换为 unix 时间戳
- 时刻/时区 - 将日期转换为 unix
- 蒙戈将ISO日期转换为奇怪的字符串
- AngularJS希伯来文日期转换器
- JavaScript将人类可读的日期转换为unix时间戳,然后再转换回来
- php日期转换为javascript日期
- 将日期转换为可读性更强的格式
- 将数据库日期时间或日期转换为Javascript新日期(GMT)格式
- 如何在 Java 中将 JavaScript 日期转换为日期
- javascript中的日期转换和操作,带有阿拉伯月份
- 将javascript日期转换为julian日期
- 如何将日期选择器日期转换为JSON对象以用于AJAX请求