【问题标题】:Convert date format in Javascript using VueJS使用 VueJS 在 Javascript 中转换日期格式
【发布时间】:2018-03-24 07:16:09
【问题描述】:

我的日期格式为19 Oct 2017,想将其转换为20171019这种格式

有没有快速的方法来做到这一点?我在 VueJs 中使用FlatPickr。如果有帮助,请在下面找到我的代码。

import flatPickr from 'vue-flatpickr-component';
import 'flatpickr/dist/flatpickr.css';
import Navigation from './Navigation'
import bus from '../bus'
export default {
  data() {
    return {
      showPanel: false,
      isClosed: false,
      arrival: null,
      departure: null,
      config: {
        dateFormat: "Ymd"
      }
    }
  },
  components: {
    flatPickr
  },
  methods: {
    closeMenu: function() {
      this.$store.state.showBooking = false;
    }
  },
  mounted() {
    bus.$on('show-booking', () => {
      this.showPanel = true;
    })
  }
}

【问题讨论】:

标签: javascript date vue.js flatpickr


【解决方案1】:

使用时刻

首先我们需要安装允许更改日期格式的 moment npm 包。

npm install moment

现在您可以创建一个全局函数来设置您想要的格式,为此您必须打开文件resources/js/app.js 并输入以下代码:

import moment from 'moment';

Vue.filter('formatDate', function(value) {
    if (value) {
        return moment(String(value)).format('MM/DD/YYYY hh:mm')
    }
});

现在在所有 js 组件中,您可以应用如下格式:

{{ response.create_at | formatDate }}

【讨论】:

  • 任何人都请确保您阅读了与我使用 django 不同的时刻字符串格式
【解决方案2】:

你可以轻松做到这一点:

  import moment from 'moment'

  methods: { 
      format_date(value){
         if (value) {
           return moment(String(value)).format('YYYYMMDD')
          }
      },
   },

然后:

format_date(date)

【讨论】:

    【解决方案3】:

    另一个不错的选择是使用moment.js lib 格式化日期,你应该先通过npm npm i --save moment将它安装在你的项目中(或者在官方网站上查看更多选项)然后你只需将它导入到您的组件并将日期更改为所需的格式:

    import moment from 'moment'
    const formattedDate = moment('19 Oct 2017').format('YYYYMMDD')
    console.log(formattedDate) //20171019
    

    【讨论】:

      【解决方案4】:

      您可以通过使用您的字符串创建新的 Date 对象来做到这一点。

      var date = new Date("19 Oct 2017");
      
      var result = "" + date.getFullYear() + ((date.getMonth() + 1) > 9 ? '' : '0') + (date.getMonth() + 1) + (date.getDate() > 9 ? '' : '0') + date.getDate();
      
      console.log(result)

      【讨论】:

      • 不推荐使用内置解析器,尤其是对于非标准日期格式。
      • @RobG 所以日期解析不是基于某些标准,并且可以在不同的浏览器中产生不同的结果?我不知道!
      【解决方案5】:

      您可以像解析器一样分解字符串,但要避免创建日期,然后格式化部分。这将避免内置日期解析器的变幻莫测:

      function reformatDate(s) {
        function z(n){return ('0'+n).slice(-2)}
        var months = [,'jan','feb','mar','apr','may','jun',
                       'jul','aug','sep','oct','nov','dec'];
        var b = s.toLowerCase().split(' ');
        return b[2] + z(months.indexOf(b[1])) + z(b[0]);
      }
      
      console.log(reformatDate('19 Oct 2017'));
      console.log(reformatDate('1 Jan 2017'));

      【讨论】:

        【解决方案6】:

        TL;DR

        new Date('19 Oct 2017').toISOString().substr(0,10).replace(/-/g, '') // returns '20171018'
        

        请参阅 MDN Date 和 String 文档

        解说员:

        // Get Date Object
        const dateObject = new Date('19 Oct 2017').toISOString()
        // Get the Year, month, day substring 
        const rawDateString = dateObject.substr(0,10)
        // Remove the hyphens
        rawDateString.replace(/-/g, '') // returns '20171018'
        

        对于 hacky 的额外格式,您可以用连字符分隔日期字符串。根据需要安排日期:

        let h = new Date('19 Oct 2017').toISOString().substr(0,10).split(/-/)
        new Array(h[1], h[0], h[2]).join('-') // returns '10-2017-18'
        

        【讨论】:

          【解决方案7】:

          您可以使用 es6 Destructuring 和 toLocalDateString 来表示本地时间,如下所示:

          const twoDigit = (digit) => digit > 9 ? digit : "0" + digit
          const [month, day, year] = new Date().toLocaleDateString().split("\/")
            .map(e => twoDigit(e));
          console.log(year + month + day);

          注意:您也可以使用new Date().toLocaleTimeString().substring(0,8).split(":") 来获取数组中的时间分量

          【讨论】:

            【解决方案8】:

            我在 vue js 中想出了这段代码,你可以这样使用

            var first_time = '09:00:00'
            var today = new Date()
            var now_time = (today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds()).toString()
            
            if (now_time === first_time){
            console.log('true')
            }else(){
            console.log('false')
            }
            

            【讨论】:

              【解决方案9】:

              我宁愿使用纯 Javascript 函数在 Vue.js 中格式化日期

              你的组件.vue

              <template>
                <div>{{ dateFormat(post.date_posted) }}</div>
              </template>
              
              <script>
              export default {
               methods: {
                  dateFormat(v) {
                    return (v) => {
                      let format = (d) =>
                        d.toString().replace(/\w+ (\w+) (\d+) (\d+).*/, "$2 $1, $3");
                      return format(new Date(v));
                    };
                  },
                },
              }
              </script>
              

              【讨论】:

              • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。
              猜你喜欢
              • 2013-07-18
              • 2012-03-09
              • 1970-01-01
              • 2012-06-05
              • 2017-10-12
              • 1970-01-01
              • 2013-11-07
              • 2012-09-29
              • 1970-01-01
              相关资源
              最近更新 更多