TimePickers.tsx 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { Picker, Text, PickerView, PickerViewColumn, View } from "@tarojs/components";
  2. import { useEffect, useState } from "react";
  3. export default function Component(props: { time: string, content: string, change: Function, isPickerView?: boolean }) {
  4. var [hour, minute] = props.time.split(':').map(x => parseInt(x))
  5. const m = Math.round(minute / 5) * 5;
  6. const v = [hour, m / 5];
  7. const [dt, setDt] = useState(v)
  8. useEffect(() => {
  9. var [hour, minute] = props.time.split(':').map(x => parseInt(x))
  10. const m = Math.round(minute / 5) * 5;
  11. const v = [hour, m / 5];
  12. setDt(v)
  13. }, [props.time])
  14. const hours: number[] = [];
  15. for (let i = 0; i <= 23; i++) {
  16. hours.push(i);
  17. }
  18. const minutes: number[] = [];
  19. for (let i = 0; i <= 11; i++) {
  20. minutes.push(i * 5);
  21. }
  22. function onPickerChange(e) {
  23. const val = e.detail.value
  24. setDt(val)
  25. var strHour = hours[val[0]] < 10 ? '0' + hours[val[0]] : hours[val[0]]
  26. var strMinute = minutes[val[1]] < 10 ? '0' + minutes[val[1]] : minutes[val[1]]
  27. props.change(strHour + ':' + strMinute)
  28. }
  29. if (props.isPickerView) {
  30. return <PickerView
  31. value={dt}
  32. onChange={onPickerChange}
  33. immediateChange={true}
  34. indicatorStyle='height: 50px;' style='width: 100%; height: 100px;'>
  35. <PickerViewColumn>
  36. {hours.map(item => {
  37. return (
  38. <View style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>{item}</View>
  39. );
  40. })}
  41. </PickerViewColumn>
  42. <PickerViewColumn>
  43. {minutes.map(item => {
  44. return (
  45. <View style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>{item}</View>
  46. );
  47. })}
  48. </PickerViewColumn>
  49. </PickerView>
  50. }
  51. return <Picker mode="multiSelector" range={[hours, minutes]} onChange={onPickerChange} value={dt}>
  52. <Text>{props.content}</Text>
  53. </Picker>
  54. }