我想按当月过滤数据(可能另外添加下个月的数据)。我从一开始就不知道该怎么做 从理论上讲,我认为我可以从我的数据中比较当前的月份和月份日期,然后仅在两个月的变量匹配时才显示数据 我想我应该这样开始:
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表上显示日期。
答案 0 :(得分:2)
你不应该用Date构造函数解析字符串(或者Date.parse,它们等同于解析),因为它在很大程度上取决于实现,并且出了名的不可靠。
我有两个日期列(从/到),但它们在表格中显示为YYYY-MM-DD HH:MM:SS。在我看来像ISO日期格式。
几乎。扩展格式为YYYY-MM-SSTHH:MM:SS,T可以由交换日期的各方之间的协议空格替换,但不严格正确。如果省略时区,则将其视为" local" date(即主机时区偏移量用于计算它所代表的时刻)。
根据ECMA-262,如果格式不正确,浏览器可以:
所以给出:
new Date('2017-01-01 23:12:12')
Firefox在主机时区返回2017年1月1日23:12:12的日期,Safari返回无效日期。两者都符合标准。
因此,如果您需要Date对象,则应使用库(例如fecha.js或moment.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 -->
&#13;
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'))
&#13;
但请注意,日期应使用明确的格式,例如DD-MMM-YYYY,例如01-JAN-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>
我希望它可以帮到你。再见。
答案 2 :(得分:1)
不要忘记,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 );
因此,您可以随时通过任何格式的日期,但有一些重要的时刻,您可以在这里阅读: