将日期字符串转换为日期对象
Convert date-string to Date object
我有两个日期字符串想要转换为Date
对象。
这是我的方法:
var d1 = "{{demand.event_mindate}}";
var d2 = "{{demand.event_maxdate}}";
var max_date = new Date(d1);
var min_date = new Date(d2);
以下是通过我的alert()
调用输出:
d1 -> 29 mars 2016
d2 -> 29 avril 2016
问题是将min_date
转换为Date对象有效,但不适用于max_date
。转换后我收到无效的日期。
任何人都可以帮助我解决这个问题吗?
如果您测试所有法语月份,则除 2 月、5 月、6 月、7 月、8 月和 12 月之外的所有月份都会被正确解析。这是因为前三 (3) 个字符被正确解析了几个月,这些字符以与其英语等效项相同的字母开头。名字相似只是偶然。请参阅下表。
解决基于语言环境解析日期字符串问题的最简单方法是使用 MomentJS 等库。
如果需要分析其他语言的日期,则可以包括所需的语言,也可以包括所有语言。
为了简洁起见,我把你所谓的"输出",用它作为输入。在您澄清输入的外观之前,以下内容应该足以解决问题。
moment.locale('fr'); // Load French
var frenchMonths = ('janvier,février,mars,avril,mai,juin,' +
'juillet,août,septembre,octobre,novembre,décembre').split(',');
generateRows(document.getElementById('date-table'), frenchMonths.map(function(month) {
return '29 ' + month + ' 2016'; // Format the month name into a valid date-string
}), function(dateString) {
return [
dateString,
new Date(dateString),
moment(dateString, 'DD MMMM YYYY').toDate()
];
});
function generateRows(table, data, fn) {
return appendChildren(table, data.map(function() {
return createRow(fn.apply(null, arguments))
}));
}
function createRow(data) {
return appendChildren(document.createElement('tr'), data.map(function(value) {
return createCell(value);
}));
}
function createCell(value) {
var td = document.createElement('td');
td.innerHTML = new String(value).substring(0, 34);
if (value instanceof Date && !isValidDate(value)) td.className = 'invalid';
return td;
}
function appendChildren(parent, nodes) {
for (var i = 0; i < nodes.length; i++) { parent.appendChild(nodes[i]); }
return parent;
}
function isValidDate(date) {
if (Object.prototype.toString.call(date) === '[object Date]') {
return !isNaN(date.getTime()); // d.valueOf() could also work
} else {
return false;
}
}
body {
font-family: Consolas,Menlo,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New,monospace,sans-serif;
font-size: 0.8em;
}
table, tr, th, td {
border-collapse: collapse;
border: thin solid #000;
}
.invalid {
color: #F00;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/locale/fr.js"></script>
<table id="date-table">
<thead>
<tr>
<th>Input</th>
<th>Output - Date Casting</th>
<th>Output - MomentJS Parse</th>
</tr>
</thead>
<tbody></tbody>
</table>
如果您需要了解 MomentJS 的格式设置,请查看格式指南。
更新
我相信这就是RobG所说的:
var months = 'janvier,février,mars,avril,mai,juin,juillet,août,septembre,octobre,novembre,décembre'.split(',');
function parseDate(datestring, months, expression, matchFn) {
return matchFn.apply(null, expression.exec(datestring).map(function(value) {
return !isNaN(value) ? parseInt(value, 10) : value;
}));
}
var date = parseDate('29 avril 2016', months, /('d{1,2}) ('w+) ('d{4})/, function(dateString, day, month, year) {
return new Date(year, months.indexOf(month), day);
});
document.body.innerHTML = date.toString();
相关文章:
- 比较从函数和生成的日期对象
- 如何获得一个只有时间的moment.js日期对象
- 使用moment.js获取时间分区的偏移日期对象
- 获取本地时间的JS日期,日期对象中没有时区详细信息
- 将某个时间格式转换为日期对象
- 正在使用日期字符串初始化javascript日期对象
- 在CouchDB Map函数中发出日期时-对日期对象调用的内容
- 如何将事件的日期放入fullcalendar中的日期对象中
- 为什么在JavaScript中可以从另一个日期对象中减去日期对象
- 理解日期对象接收参数时的getDay()方法
- JS日期对象setUTCMonth()将月份增加2
- 时间-日期对象JavaScript getUTCMilliseconds
- 将带有 AM/PM 的日期字符串转换为 javascript 日期对象
- Javascript 测试中的假日期对象
- 转换/格式化日期对象
- 如何在发布JavaScript日期对象时保留时区偏移量
- JS日期对象在某个范围内的百分比
- 无法从日期对象javascript获取日期和月份
- javascript日期对象未返回正确的日期
- Javascript日期对象-JSFiddle中的不同值