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

时间:2017-01-27 10:37:04

标签: javascript date sharepoint sharepoint-2013

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

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表上显示日期。

3 个答案:

答案 0 :(得分:2)

你不应该用Date构造函数解析字符串(或者Date.parse,它们等同于解析),因为它在很大程度上取决于实现,并且出了名的不可靠。

  

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

几乎。扩展格式为YYYY-MM-SSTHH:MM:SS,T可以由交换日期的各方之间的协议空格替换,但不严格正确。如果省略时区,则将其视为" local" date(即主机时区偏移量用于计算它所代表的时刻)。

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

  1. 将其视为无效的ISO 8601并返回无效日期
  2. 将其视为不是ISO 8601并回归到他们希望使用的任何解析算法
  3. 所以给出:

    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 -->
    &#13;
    &#13;
    &#13;

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

    同样,如果你想将字符串重新格式化为DD.MM.YYYY,你可以重新格式化字符串:

    &#13;
    &#13;
    /* 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;
    &#13;
    &#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 );

因此,您可以随时通过任何格式的日期,但有一些重要的时刻,您可以在这里阅读:

Converting string to date in js