Yêu cầu thg 7 4, 2019 4:02 SA 252 0 2
  • 252 0 2
0

Chuyển đồi thời gian sang giây

Chia sẻ
  • 252 0 2

Mình đang dùng thư viện TimePicker của Antdesign. Mình muốn khi người dùng select thì trong giá trị đó chỉ lấy thời gian (HH:mm:ss) và sau đó quy đổi toàn bộ ra giây (s). Mọi người cho mình hỏi dùng phương thức nào của moment.js để convert được như vậy.

https://codesandbox.io/s/72yy447kk1

Ví dụ ở đây khi mình chọn : "00:02:15" --> mình muốn log ra kq là 135(s) ạ.

Mình không biết có nhất thiết phải chuyển như vậy cho tính toán đúng hay không nữa, tại vì ở đây mình không chuyển và tính thì thấy kq bị sai.

https://codesandbox.io/s/happy-euclid-4lu68

Mọi người xem và giúp mình. Mình xin cám ơn !

2 CÂU TRẢ LỜI


Đã trả lời thg 7 4, 2019 4:35 SA
Đã được chấp nhận
+1

Nếu không muốn dùng moment bạn có thể dùng cách đơn giản sau để tính toán. Với điều kiện là time phải có đúng định dạng ở trên h:m:i:

const timeString = '00:02:15';
const timeRange = timeString.split(':');

let seconds = 0;

timeRange.forEach((value, weight) => seconds += parseInt(value) * Math.pow(60, 2 - weight));

console.log(seconds)

Update thêm: Lỗi hiển thị kết quả trong code demo của chủ thớt.

Cái time trong code của chủ thớt cần chia 1000 để chuyển về second. comment #bq5QOwJGJZD

Sau đó, là lỗi hiển thị. Chủ thớt cần khởi tạo ở 00:00:00 trước rồi set giây sau cho nó nếu không nó sẽ tính ngày, giờ, phút hiện tại. Sửa lại sẽ theo comment #aGK7gXzQMKj như này:

moment("00:00:00", "HH:mm:ss")
              .set("second", trimTime)
              .format("HH:mm:ss")
Chia sẻ
Avatar Anh Tran @thanh_tuan
thg 7 4, 2019 4:38 SA

umk, trước m cũng có viết một hàm bằng tay để tính toán kiểu này, nhừn về sau lại suy nghĩ đằng nào cũng sử dụng thư viện momentjs rồi thì cố gắng tận dụng được sức mạnh của nó để giảm bớt được code cho gọn. Vì thế nên mình nghĩ mình sẽ dựa vào thư viên moment.js để xử lý chỗ này.

Bạn có thế kiểm tra giúp mình ở comment trên của mình, hàm tính toán của mình tại sao bị sai không ? Tks bạn

thg 7 4, 2019 4:47 SA

@thanh_tuan Cái time của bạn đang tính toán trên milisecond thì phải. Sau khi tính toán xong bạn chia cho 1000 để chuyển về second.

Avatar Anh Tran @thanh_tuan
thg 7 4, 2019 5:02 SA

Mình có chia kq cho 1000 rồi mà sao nó vẫn không được bạn ạ : https://codesandbox.io/s/happy-euclid-4lu68

thg 7 4, 2019 5:17 SA

@thanh_tuan Mình mới sửa lại giúp bạn rồi đấy, chia 1000 để lấy ra giây luôn. Chỗ hiển thị nó bị sai vì bạn tạo mới bằng monment(trimTime) nó sẽ tính vào theo thời gian hiện tại. Bạn cần khởi tạo ở 00:00:00 trước rồi set giây sau cho nó như này:

trimTime &&
            moment("00:00:00", "HH:mm:ss")
              .set("second", trimTime)
              .format("HH:mm:ss")
thg 7 4, 2019 5:18 SA
Avatar Anh Tran @thanh_tuan
thg 7 4, 2019 6:37 SA

@huukimit Hay quá, cám ơn bạn hén 😄

Đã trả lời thg 7 4, 2019 4:12 SA
+1

Trong moment.js, bạn có thể sử dụng:

diff(moment().startOf('day'), 'seconds')

để convert sang giây
Như trong code của bạn thì sẽ như sau:

function onChange(time, timeString) {
  console.log(time.diff(moment().startOf('day'), 'seconds'));
}

😘

Chia sẻ
Avatar Anh Tran @thanh_tuan
thg 7 4, 2019 4:13 SA

Bạn ơi, mình vừa update câu hỏi, bạn xem hộ mình xem, trường hợp này có nhất thiết phải chuyển không và tại sao của mình tính đang bị sai nhỉ : https://codesandbox.io/s/happy-euclid-4lu68

Avatar Phan Lý Huỳnh @phanlyhuynh
thg 7 4, 2019 5:11 SA

@thanh_tuan bạn đang muốn tính thời gian endtime - starttime đúng k nhỉ :v

Avatar Anh Tran @thanh_tuan
thg 7 4, 2019 6:37 SA

@phanlyhuynh Đúng rồi, mình muốn tính như vậy và sau khi tính xong nó hiển thị theo Format HH:mm:ss. Bạn @huukimit đã giúp mình bên dưới rồi. Tks bạn

Avatar Phan Lý Huỳnh @phanlyhuynh
thg 7 4, 2019 8:11 SA

@thanh_tuan ok bạn. bạn có thể tìm hiểu thêm phần duration của moment.js để xử lý cho phần này 😘

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí