繁体   English   中英

将ISO日期转换为国际日期类型javascript

[英]Convert ISO date to international date type javascript

我想按当前月份过滤数据(也许另外添加下个月的数据)。 我不知道从头开始。
从理论上讲,我认为我可以从数据中比较当前月份和月份日期,然后仅在两个月变量匹配时才显示数据。
我以为我应该这样开始:

var myDate = new Date();
var thisMonth = new Date(myDate);
thisMonth.setMonth(myDate.getMonth()+1);
var nextMonth = new Date(myDate);
nextMonth.setMonth(myDate.getMonth()+2);

预先感谢您的任何帮助!

附加详细说明:
我复制了SharePoint 2013列表,并将其数据显示在SharePoint网站页面上。
在内容编辑器Web部件中,我编写了JavaScript代码以将该列表显示为表格。
我有两个日期列(从/直到),但它们在表中显示为YYYY-MM-DD HH:MM:SS 在我看来像ISO日期格式。 我看到了几个示例,该示例说明如何在js中将日期类型转换为日期类型,例如DD.MM.YYYY。 没有一个对我有用,或者我不知道如何正确地做。 因此,我创建了计算字段,该字段将日期类型显示为文本/字符串,此后,我设法以所需的方式在js表上显示日期。

您不应该使用Date构造函数(或Date.parse,它们等效于解析)来解析字符串,因为它在很大程度上依赖于实现且众所周知是不可靠的。

我有两个日期列(从/到),但它们在表中显示为YYYY-MM-DD HH:MM:SS。 在我看来像ISO日期格式。

几乎。 扩展格式为YYYY-MM-SSTHH:MM:SS,可以用交换日期的各方之间的协议空格代替T,但这并不完全正确。 如果省略了时区,则将其视为“本地”日期(即,主机时区偏移量用于计算其所代表的时间)。

根据ECMA-262,如果格式不正确,浏览器可以:

  1. 将其视为无效的ISO 8601并返回无效的日期
  2. 将其视为非ISO 8601并退回到他们希望使用的任何解析算法

因此给出:

new Date('2017-01-01 23:12:12')

Firefox在主机时区返回日期为2017年1月1日23:12:12,Safari返回无效日期。 两者均符合标准。

因此,如果需要Date对象,则应该使用库(例如fecha.jsmoment.js )或简单函数手动解析字符串。

但是无论如何,您无需将字符串解析为Date即可重新格式化字符串,只需使用字符串方法即可,并且完全避免Date解析变幻莫测。

 function filterCurrentMonth() { // Create string for comparison var d = new Date(); var currentMonth = d.getFullYear() + '-' + ('0' + (d.getMonth()+1)).slice(-2); // Hide rows that don't have string in the first cell var rows = document.getElementById('t0').rows; [].forEach.call(rows, function(row) { if (row.cells[0].textContent.indexOf(currentMonth) == -1) { row.style.display = 'none'; } else { row.style.display = ''; } }); } function filterNone() { var rows = document.getElementById('t0').rows; [].forEach.call(rows, function(row) { row.style.display = ''; }); } 
 #t0 { font-size: 60%; } 
 <button onclick="filterCurrentMonth()">Show only current month rows</button> <button onclick="filterNone()">Show all rows</button> <table id="t0"> <tr><td>2017-01-01 23:12:12<tr><td>2017-02-01 23:12:12<tr><td>2017-05-01 23:12:12 <tr><td>2017-03-01 23:12:12<tr><td>2017-04-01 23:12:12<tr><td>2017-12-01 23:12:12 <tr><td>2017-10-01 23:12:12<tr><td>2017-11-01 23:12:12<tr><td>2017-06-01 23:12:12 <tr><td>2017-07-01 23:12:12<tr><td>2017-09-01 23:12:12<tr><td>2017-08-01 23:12:12 <tr><td>2017-01-01 23:12:12<tr><td>2017-02-01 23:12:12<tr><td>2017-05-01 23:12:12 <tr><td>2017-03-01 23:12:12<tr><td>2017-04-01 23:12:12<tr><td>2017-12-01 23:12:12 <tr><td>2017-10-01 23:12:12<tr><td>2017-11-01 23:12:12<tr><td>2017-06-01 23:12:12 <tr><td>2017-07-01 23:12:12<tr><td> <!-- begin snippet: js hide: false console: true babel: false --> 

23:12:122017-08-01 23:12:12

同样,如果要将字符串重新格式化为DD.MM.YYYY,则只需重新格式化字符串即可:

 /* Format string in YYYY-MM-DD HH:mm:ss format to DD.MM.YYYY ** @param {string} s - string in YYYY-MM-DD HH:mm:ss format ** @returns {string} in DD.MM.YYYY format */ function formatYMDtoDMY(s) { var b = s.split(/\\D/); return b[2] + '.' + b[1] + '.' + b[0]; } console.log(formatYMDtoDMY('2017-10-01 23:12:12')) 

但是请注意,日期应使用明确的格式,例如DD-MMM-YYYY,例如2017年1月1日。 为此,只需要一行代码。 ;-)

你在问吗

我不知道从头开始。

您可以通过以下代码获取当前月份的开始日期和下个月的最后日期:

 <html> <script> var myDate = new Date(); var thisMonth = new Date(myDate.getFullYear(), myDate.getMonth(), 1); var nextMonth = new Date(myDate.getFullYear(), myDate.getMonth() + 2, 0); console.log("Date start: " + thisMonth); console.log("Date end: " + nextMonth); console.log("Formatted date start: " + formatDate(thisMonth)); console.log("Formatted date end: " + formatDate(nextMonth)); function padLeft(n){ return ("00" + n).slice(-2); } function formatDate(){ var d = new Date, dformat = [ d.getFullYear(), padLeft(d.getMonth()+1), padLeft(d.getDate()) ].join('-')+ ' ' + [ padLeft(d.getHours()), padLeft(d.getMinutes()), padLeft(d.getSeconds())].join(':'); return dformat } </script> </html> 

希望对您有帮助。 再见。

别忘了,getMonth()返回一个从0到11的数字,代表月份,而Date使日期成为具有方法和属性的对象

这里有很多例子

 var date = new Date('2010-10-11 00:00:00'); var formatDate = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear(); console.log( formatDate ); 

因此,您始终可以采用任何格式传递日期,但在此处可以阅读一些重要时刻:

在js中将字符串转换为日期

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM