DateTimePicker.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. public class DateTimePicker : MonoBehaviour
  7. {
  8. public Dropdown Day;
  9. public Dropdown Month;
  10. public Dropdown Year;
  11. public DateTime Date {
  12. get {
  13. var date = new DateTime(int.Parse(Year.options[Year.value].text), int.Parse(Month.options[Month.value].text), int.Parse(Day.options[Day.value].text));
  14. return date; }
  15. set {
  16. Days();
  17. //Year.value = Date.Year.;
  18. Month.value = Date.Month - 1;
  19. Day.value = Date.Day - 1;
  20. oldYear = Year.value;
  21. oldMonth = Month.value;
  22. }
  23. }
  24. int oldYear = -1;
  25. int oldMonth = -1;
  26. // Start is called before the first frame update
  27. void Start()
  28. {
  29. DateNow();
  30. }
  31. // Update is called once per frame
  32. void Update()
  33. {
  34. if (oldYear == -1 || oldMonth == -1)
  35. DateNow();
  36. if (oldYear != Year.value || oldMonth != Month.value)
  37. {
  38. Days();
  39. oldYear = Year.value;
  40. oldMonth = Month.value;
  41. }
  42. }
  43. void Days()
  44. {
  45. Day.options.Clear();
  46. var year = int.Parse(Year.options[Year.value].text);
  47. var month = int.Parse(Month.options[Month.value].text);
  48. var days = DateTime.DaysInMonth(year, month);
  49. for (int d = 1; d <= days; d++)
  50. Day.options.Add(new Dropdown.OptionData($"{d}"));
  51. Day.value = 0;
  52. }
  53. void DateNow()
  54. {
  55. for (var y = 2020; y <= DateTime.Now.Year; y++)
  56. Year.options.Add(new Dropdown.OptionData($"{y}"));
  57. for (var m = 1; m <= 12; m++)
  58. Month.options.Add(new Dropdown.OptionData($"{m}"));
  59. Year.value = Year.options.Count - 1;
  60. Month.value = DateTime.Now.Month - 1;
  61. oldYear = Year.value;
  62. oldMonth = Month.value;
  63. Days();
  64. Day.value = DateTime.Now.Day - 1;
  65. }
  66. }