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);
这是因为带有'-'符号吗?我该如何克服?
#1 楼
在“-”上分割将字符串解析为所需的部分:
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})/, "//"))
为什么不使用正则表达式?
因为您知道将要处理由三部分组成的,由连字符分隔的字符串。
但是,如果您要在另一个字符串中查找相同的字符串,则使用正则表达式是可行的方法。
重复使用
因为在您的代码中多次这样做示例代码,或者可能在代码库中的其他地方,将其包装在一个函数中:
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])
}
用作:
现代JavaScript
如果您能够使用更现代的JS,则数组解构也是一种不错的选择:
var f = toDate("#datepicker")
var t = toDate("#datepickertwo")
评论
击败我...但我仍然使用DateJs。由于栅栏张贴错误,这并不完全正确。月是0-11,因此您需要减去1。f =新的Date(from [2],from [1] -1,from [0]);
– kasdega
11年8月22日在18:27
选择的答案带有会产生错误日期的错误。太棒了!
–epascarello
11年8月22日在19:49
干杯@kasdega-不久前编辑!
–艾德里安·林奇(Adrian Lynch)
2015年1月2日,15:21
@AdrianLynch如何在JavaScript中将“月dd,yyyy”转换为“ MM / dd / yyyy”?
– dilipkumar1007
16年5月12日在9:24
@Adrian Lynch现代JavaScript选项很棒!谢谢。
–亚历山大·里贝罗(Alexandre Ribeiro)
18年5月9日在18:05
#2 楼
正则表达式示例:new Date( "13-01-2011".replace( /(\d{2})-(\d{2})-(\d{4})/, "//") );
评论
修订版也以/为分隔符,并且以2位数字(或大于1的任何数字)组成的年份:replace(/(\ d {2})[-/](\ d {2})[-/]( \ d +)/,“ $ 2 / $ 1 / $ 3”)
–茨城
2014-12-22 17:32
为什么要选择@AdemirNuno作为答案?为什么将RegEx用于已知格式的字符串?您并不是要寻找模式,您知道第一个数字是日期,第二个是月份,第三个是年份。在这种情况下,RegEx是用于该工作的错误工具。
–艾德里安·林奇(Adrian Lynch)
15年1月2日在15:24
使用非数字定界符,不带前导零和2或4位数字年份的日期的修订:new Date(“ 23. 2. 15” .replace(/(\ d +)[^ d] +(\ d +)[^ d ] +(\ d +)/,“ $ 2 / $ 1 / $ 3”)); zh.wikipedia.org/wiki/Date_format_by_country
– PaulH
2015年2月23日在8:32
太好了,谢谢。我的日期格式带有时间,因此我将其重新编码为:'new Date(“ 13-01-2011” .replace(/(\ d {2})-(\ d {2})-(\ w)/ ,“ $ 2 / $ 1 / $ 3”));'这样对吗?
– KamuranSönecek
2015年9月29日下午6:00
@NeerajSingh如何在JavaScript中将“月dd,yyyy”转换为“ MM / dd / yyyy”?
– dilipkumar1007
16年5月12日在9:23
#3 楼
另一种可能性:var from = "10-11-2011";
var numbers = from.match(/\d+/g);
var date = new Date(numbers[2], numbers[0]-1, numbers[1]);
匹配数字并重新排序
评论
最初的问题还指定了“ dd-mm-yyyy”,而不是“ mm-dd-yyyy”,因此仍然是错误的(但仅是)。
– Phil M Jones
16年4月13日在10:37
@epascarello如何在JavaScript中将“月dd,yyyy”转换为“ MM / dd / yyyy”?
– dilipkumar1007
16年5月12日在9:22
var date = new Date(数字[2],数字[1] -1,数字[0]);
– Rui Nunes
17年4月13日在9:24
#4 楼
使用moment.js示例:var from = '11-04-2017' // OR $("#datepicker").val();
var milliseconds = moment(from, "DD-MM-YYYY").format('x');
var f = new Date(milliseconds)
评论
moment(from,“ DD-MM-YYYY”)。toDate()
–拉彭科夫·弗拉基米尔(Lapenkov Vladimir)
19-10-14在9:59
#5 楼
var from = $("#datepicker").val();
var f = $.datepicker.parseDate("d-m-Y", from);
评论
您要获取Date.parseDate吗?
– kasdega
11年8月22日在18:30
@kasdega对不起,我在想$ .datepicker.parseDate,现在修复它:)
– Saad Imran。
13年4月5日在15:29
您应该使用$ .datepicker.parseDate(“ dd-mm-yy”,from);正确解析日期,例如2017年1月24日,请在api.jqueryui.com/datepicker中查看datepicker文档
–安德烈·毛罗(Andrea Mauro)
17年6月1日在18:50
#6 楼
您还可以在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)
评论
@AmitSengar如何在JavaScript中将“月dd,yyyy”转换为“ MM / dd / yyyy”?
– dilipkumar1007
16年5月12日在9:22
#7 楼
请使用以下格式:myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00
评论
您从哪里获得parseDate函数?那是本机javascript函数吗?
–约瑟夫·西尔伯(Joseph Silber)
11年8月22日在18:09
抱歉,我该如何实施?我也需要格式为dd-mm-yy
–user559142
11年8月22日在18:12
parseDate是本机JS函数。有关更多信息,请参见:xaprb.com/articles/javascript-date-parsing-demo.html
– Diodeus-詹姆斯·麦克法兰
11年8月22日在18:51
@Diodeus ...真的是本地人吗? ff和chrome如何抛出错误?
–epascarello
2011年8月22日19:40
@Diodeus即使最后一次编辑对我也不起作用(至少使用Chrome)。它将日期设置为“ 2011-01-03”,UTC时间设置为00:00:00。因此,如果用户的时区小于UTC,则实际上是前一天。
–迈克
2014年2月23日在3:19
#8 楼
就我而言new Date("20151102034013".replace(/(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/, "--T::"))
结果:2015年11月2日星期一格林尼治标准时间+0100(CET)
然后我使用.getTime()进行工作毫秒
#9 楼
接受的答案有点儿有错误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
}
#10 楼
您可以使用外部库来帮助您。http://www.mattkruse.com/javascript/date/source.html
getDateFromFormat(val,format);
也请参见:在JavaScript中解析DateTime字符串
评论
如何在javascript中将myDate = '20 / 06/17'转换为'20 / 6/2017 00:00:00'格式?
– Ghanshyam Lakhani
17年7月28日在11:04
#11 楼
看看有关所有与小日期有关的问题的Datejs。您也可以通过parseDate函数解决此问题#12 楼
您可以:var f = new Date(from.split('-').reverse().join('/'));
#13 楼
您可以使用正则表达式。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)
);
}
评论
产生错误的月份!月开始于零,而不是一。因此,如果您选择Jan,您会说Feb。
–epascarello
2011年8月22日19:55
@epascarello-忘记了Date API有多糟糕。
–混沌潘迪翁
11年8月22日在20:27
@ChaosPandion:如何在javascript中将myDate = '20 / 06/17'转换为'20 / 6/2017 00:00:00'格式?
– Ghanshyam Lakhani
17年7月28日在11:05
#14 楼
new Date().toLocaleDateString();
就这么简单,只需将您的日期传递给js Date Object
评论
您的意思是在Date构造函数中传递日期字符串,例如new Date('30 / 12/2018')。toLocaleDateString()吗?返回无效日期
–泰米尔女士
18-10-3在7:32
用户日期发生了什么?
–乔纳森·阿里亚斯(Jonathan Arias)
10月14日21:25
评论
这是在所有日期还是特别是一个日期发生?