如何从javascript中的字符串创建日期对象
拥有此字符串如何从javascript中的字符串创建日期对象,javascript,string,date,Javascript,String,Date,拥有此字符串30/11/2011。我想将其转换为日期对象 我是否需要使用: 或 ?您肯定要使用第二个表达式,因为JS中的月份是从0枚举的 您也可以使用Date.parse方法,但它使用不同的日期格式: var timestamp = Date.parse("11/30/2011"); var dateObject = new Date(timestamp); 语法如下: new Date(year, month [, day, hour, minute, second,
30/11/2011
。我想将其转换为日期对象
我是否需要使用:
或
?您肯定要使用第二个表达式,因为JS中的月份是从0枚举的 您也可以使用Date.parse方法,但它使用不同的日期格式:
var timestamp = Date.parse("11/30/2011");
var dateObject = new Date(timestamp);
语法如下:
new Date(year, month [, day, hour, minute, second, millisecond ])
所以
是正确的;天、小时、分钟、秒、毫秒是可选的
在js中,月份是从0开始索引的。对于实际中有关JavaScript规范的任何问题,我都强烈建议使用、和 正如它在关于您使用的参数变量中所述:
new Date(year, month, day [, hour, minute, second, millisecond ])
关于月份参数:
月份表示月份的整数值,从1月的0开始到12月的11
显然,那么,您应该使用11月份的月份编号10
注:我推荐MDN的原因是正确性、对事物的良好解释、示例和浏览器兼容性图表。如上所述,有多种创建日期的方法。我不会重复同样的内容。这里有一个在Java脚本中将字符串转换为日期的小方法,如果您正在寻找的是这个方法
function compareDate(str1){
// str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
var dt1 = parseInt(str1.substring(0,2));
var mon1 = parseInt(str1.substring(3,5));
var yr1 = parseInt(str1.substring(6,10));
var date1 = new Date(yr1, mon1-1, dt1);
return date1;
}
非常简单:
var dt=new Date("2011/11/30");
日期应为ISO格式yyyy/MM/dd。首先按如下方式提取字符串
var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
那么
我不敢相信javascript与解析日期不一致。我听说没有时区时的默认值将从UTC更改为本地--希望网络准备就绪;) 当涉及到解析日期时,我更喜欢让Javascript来完成繁重的工作。不过,以相当透明的方式处理本地时区问题会很好。考虑到这两件事,这里有一个函数可以在当前的状态下完成这项工作——当Javascript发生变化时,它仍然可以工作,但随后可以删除(当然,人们需要一点时间来赶上较旧的浏览器/NodeJ)
我们需要一个日期对象;所以,创建一个。如果有时区,我们就完了。否则,使用+hh:mm格式创建一个本地时区字符串(比+hhmm更容易接受)。我认为它应该是var d=新日期(2011,10,30);令人惊讶的是,大约1.5年后,有人注意到了这一点,24000多个浏览量。或者我们可以使用
新日期(2011,11,0)
它也可以直接选择日期,作为单个字符串const Date=new Date(“2018-05-09”)
No,让引擎为您处理它,并使用建议的日期。parse
在使用parse方法时要注意时区问题。如果解析的日期恰好无效(如2月30日),要注意Javascript以静默方式返回与解析的日期完全不同的日期。还要注意返回数字,特别是1970年以来的ms。而Dogbert的答案将返回一个JS Date对象,其中有一个从\uuuuu proto\uuuuu
提供的健壮的方法选择。这将返回一个数字,而不是日期。根据官方文档:注意:由于浏览器差异和不一致,强烈建议使用日期构造函数(和date.parse,它们是等效的)解析日期字符串。避免通过解析字符串来创建日期对象。相反,构建您自己的函数,从您拥有的字符串中理解年、月和日,然后通过将不同的数字传递给构造函数来创建日期。请参阅@IgorDymov的答案。您的查询是关于一个“字符串”,而不是三个数字的顺序。这个问题有点让人困惑——第一句话和标题是关于字符串解析的,而问题的其余部分是关于从一组整数构造一个日期。我投票以重复的方式结束,因为我假设标题是正确的,您正在寻找字符串解析。这非常有用,应该是最重要的答案,因为它实际上以一种可适应的方式回答了问题,具体取决于您的日期字符串格式(并且没有任何时区问题的风险).对我来说,这也是最好的答案。当我偶然发现自己需要这样做,并了解到月份从0开始索引时,我思考了几种方法如何更改月份值。我又向下滚动了一些,发现了这个:-)谢谢!这实际上正确地回答了这个问题。“字符串中的日期对象”。谢谢你的回答。实际上,根据链接,日期也是可选的。它默认为每月的第一天。据我所知,官方ISO8601格式是yyyy MM dd()是的,它通过执行新日期(“2019-12-21 07:25:00”)@ValterEkholm在chrome和ff中运行良好,但在safari@gardelin-谢谢
new Date(year, month, day [, hour, minute, second, millisecond ])
function compareDate(str1){
// str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
var dt1 = parseInt(str1.substring(0,2));
var mon1 = parseInt(str1.substring(3,5));
var yr1 = parseInt(str1.substring(6,10));
var date1 = new Date(yr1, mon1-1, dt1);
return date1;
}
var dt=new Date("2011/11/30");
var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
var d = new Date( dateString[3], dateString[2]-1, dateString[1] );
function strToDate(dateStr)
{
var dateTry = new Date(dateStr);
if (!dateTry.getTime())
{
throw new Exception("Bad Date! dateStr: " + dateStr);
}
var tz = dateStr.trim().match(/(Z)|([+-](\d{2})\:?(\d{2}))$/);
if (!tz)
{
var newTzOffset = dateTry.getTimezoneOffset() / 60;
var newSignStr = (newTzOffset >= 0) ? '-' : '+';
var newTz = newSignStr + ('0' + Math.abs(newTzOffset)).slice(-2) + ':00';
dateStr = dateStr.trim() + newTz;
dateTry = new Date(dateStr);
if (!dateTry.getTime())
{
throw new Exception("Bad Date! dateStr: " + dateStr);
}
}
return dateTry;
}