2014-04-24 13 views
122

Tôi đang sử dụng đoạn mã sau để chuyển đổi một server-side ngày-thời gian địa phương sử dụng Moment.jsDeprecation cảnh báo: xây dựng khoảnh khắc rơi trở lại ngày js

moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow() 

Nhưng tôi nhận được:

Cảnh báo ngừng sử dụng: xây dựng thời gian quay trở lại ngày js. Điều này không được khuyến khích và sẽ bị xóa trong bản phát hành chính sắp tới. Vui lòng tham khảo https://github.com/moment/moment/issues/1407 để biết thêm thông tin.

Có vẻ như tôi không thể loại bỏ nó! Làm cách nào để khắc phục sự cố?

+0

bạn đã đọc ở đâu nó nói làm như vậy? –

+4

Tất nhiên tôi đọc !! nhưng tôi hoặc là tôi bối rối và không thể lấy bất kỳ giải pháp hoặc không có bất kỳ giải pháp trong đó ở tất cả! – dariush

+0

Sau khi đọc một chút ở đó, nó có vẻ là một vấn đề thực sự, đã được thảo luận vài tháng trước ... Hãy lấy một công cụ khác ... –

Trả lời

239

Để thoát khỏi cảnh báo, bạn cần phải hoặc là:

  • đèo trong một định dạng phiên bản ISO của chuỗi ngày của bạn:

    moment('2014-04-23T09:54:51');

  • đèo trong chuỗi bạn có bây giờ, nhưng hãy nói cho Moment biết chuỗi định dạng là gì:

    moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');

  • Chuyển đổi chuỗi của bạn vào một ngày đối tượng JavaScript và sau đó vượt qua đó vào Moment:

    moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));

Tùy chọn cuối cùng là một built-in dự phòng mà Moment hỗ trợ cho bây giờ, với giao diện điều khiển bị phản đối cảnh báo. Họ nói rằng họ sẽ không ủng hộ dự phòng này trong các phiên bản tương lai. Họ giải thích rằng việc sử dụng new Date('my date') là quá khó lường.

+1

bạn thân, cố định vấn đề :) – dariush

+17

Bất kỳ văn bản nào trong dấu đầu dòng trong câu trả lời ở trên sẽ đưa ra một thông điệp cảnh báo không được chấp nhận tốt hơn nhiều so với thông điệp cảnh báo khó hiểu đã bắt đầu câu hỏi này. – Will

+1

Đang sử dụng 'thời điểm ((ngày mới ('Thứ năm, ngày 12 tháng 11 năm 2015 11:59' ') .ISOSING());' ok? Hay tôi chỉ cần trấn áp một vấn đề sẵn sàng để âm thầm trong tương lai gần như thế này? –

11

Là một thay thế, bạn có thể ngăn chặn hiển thị cảnh báo deprecation bằng cách thiết lập moment.suppressDeprecationWarnings = true;

1

Nếu ngày của bạn sẽ được chuyển cho bạn từ một API như string (như vấn đề của tôi), bạn có thể sử dụng một bộ lọc để chuyển đổi chuỗi thành một ngày cho thời điểm. Điều này sẽ đảm bảo cảnh báo thời điểm xây dựng.

$scope.apiDate = 10/29/2017 18:28:03"; 

angular.module('myApp').filter('stringToDate', function() { 
    return function(value) { 
    return Date.parse(value); 
    }; 
}); 

Thêm nó vào quan điểm:

{{apiDate | stringToDate | amDateFormat:'ddd, MMM DD'}} 
Các vấn đề liên quan