【问题标题】:How to convert the selected date to last month and last year date using moment.js?如何使用 moment.js 将所选日期转换为上个月和去年日期?
【发布时间】:2017-12-22 13:51:00
【问题描述】:

我正在处理 moment.js,但我很困惑转换这两个日期。

For Example:

    var start = moment().startOf('month');  // Dec 01 2017
    var end = moment(); // Dec 31 2017

我想将此日期转换为上个月和去年。

Eg: 
    Last Month: Nov 01 2017 & Nov 30 2017 (Problem in converting 31 to 30)
    Last Year: Dec 01 2016 & Dec 31 2016

如果我更改开始和结束日期,则需要更改另一个值。

更新:

$(function() {

    var start = moment().startOf('month'); // eg: 12/01/2017
    var end = moment();  // eg: 12/31/2017

    function cb(start, end) {

        var startyear = moment().subtract(start, 'year'); // eg: 12/01/2016
        var endyear = moment().subtract(end, 'year'); // eg: 12/31/2016

        var startmonth = moment().subtract(start, 'month'); // eg: 11/01/2017
        var endmonth = moment().subtract(end, 'month'); // eg: 11/30/2017

        $('#reportrange span').html(start.format('MMM D, YYYY') + ' - ' + end.format('MMM D, YYYY'));
        $('#report1 span').html(startyear.format('MMM D, YYYY') + ' - ' + endyear.format('MMM D, YYYY'));
        $('#report2 span').html(startmonth.format('MMM D, YYYY') + ' - ' + endmonth.format('MMM D, YYYY'));
    }

     $('#reportrange').daterangepicker({
         "autoApply": true,
        "showDropdowns": false,
        "alwaysShowCalendars": false,
        "opens": "left",
        startDate: start,
        endDate: end,
    },cb);  

    cb(start, end);
    });

如果我选择两个日期,我想将这些日期转换为年和月。

【问题讨论】:

  • 你的问题不清楚,请添加你想要的输出?
  • 您的问题不清楚。这里选择的日期是什么?以及所选日期与Last MonthLast Year 中给出的两个日期有何关系?
  • 我更新了我的代码,你有什么想法吗? @LalitSachdeva
  • @palasH 你在检查更新的代码后有什么想法吗?

标签: javascript jquery date momentjs


【解决方案1】:

如果您正在根据当前日期查找上个月和上一年的开始和结束日期,您可以简单地执行以下操作:

var yourDate = '2017-11-12';

var startOfLastMonth = moment(yourDate).subtract(1, 'month').startOf('month');
var endOfLastMonth = moment(yourDate).subtract(1, 'month').endOf('month');

var startOfLastYear = moment(yourDate).subtract(1, 'year').startOf('month');
var endOfLastYear = moment(yourDate).subtract(1, 'year').endOf('month');

console.log('Your Date: ' + moment(yourDate).format('MMM DD YYYY'))
console.log('')
console.log(startOfLastMonth.format('MMM DD YYYY'))
console.log(endOfLastMonth.format('MMM DD YYYY'))
console.log('')
console.log(startOfLastYear.format('MMM DD YYYY'))
console.log(endOfLastYear.format('MMM DD YYYY'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js"></script>

【讨论】:

  • 嗨@palasH 你是正确的,但我想根据我的选择转换日期。例如,如果我选择 2017 年 11 月 1 日和 2017 年 11 月 12 日这两个日期,它们也只能转换为月份。
  • 只需将您的日期以 YYYY-MM-DD 格式(如 moment('2016-01-01'))传递到时刻,同样的逻辑也可以正常工作。代码已更新!
  • 很高兴它有帮助!
【解决方案2】:

我认为您的问题是您试图减少月份和年份,但没有检查该月的最后一天。

检查这个例子:

var myDate = new Date(2017, 11, 31);
console.log(myDate);

2017 年 12 月 31 日星期日 00:00:00 GMT-0200(东美洲夏令时)

如果您尝试减少年份和月份并且不检查该月的最后一天,则再次更改月份:

myDate.setFullYear(2016, 10, 31);
console.log(myDate);

2016 年 12 月 1 日星期四 00:00:00 GMT-0200(东美洲夏令时)

如果您减少检查日期以不超过最大值将正常工作:

myDate.setFullYear(2016, 10, 30);
console.log(myDate);

2016 年 11 月 30 日星期三 00:00:00 GMT-0200(东美洲夏令时)

这里已经是如何计算每月最后一天的问题了Calculate last day of month in javascript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多