Asked Jul 4th, 2019 4:02 AM 174 0 2
  • 174 0 2
0

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

Share
  • 174 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 ANSWERS


Answered Jul 4th, 2019 4:35 AM
Accepted
+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")
Share
Avatar Anh Tran @thanh_tuan
Jul 4th, 2019 4:38 AM

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

0
| Reply
Share
Jul 4th, 2019 4:47 AM

@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.

0
| Reply
Share
Avatar Anh Tran @thanh_tuan
Jul 4th, 2019 5:02 AM

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

0
| Reply
Share
Jul 4th, 2019 5:17 AM

@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")
0
| Reply
Share
Jul 4th, 2019 5:18 AM
Avatar Anh Tran @thanh_tuan
Jul 4th, 2019 6:37 AM

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

+1
| Reply
Share
Answered Jul 4th, 2019 4:12 AM
+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'));
}

😘

Share
Avatar Anh Tran @thanh_tuan
Jul 4th, 2019 4:13 AM

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

0
| Reply
Share
Avatar Phan Lý Huỳnh @phanlyhuynh
Jul 4th, 2019 5:11 AM

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

0
| Reply
Share
Avatar Anh Tran @thanh_tuan
Jul 4th, 2019 6:37 AM

@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

0
| Reply
Share
Avatar Phan Lý Huỳnh @phanlyhuynh
Jul 4th, 2019 8:11 AM

@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 😘

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.