Date cách 5 ngày
unknown
plain_text
2 months ago
4.3 kB
4
Indexable
import React, { useState, useEffect } from "react"; import { TouchableOpacity, Text, StyleSheet, View } from "react-native"; import DateTimePicker from "@react-native-community/datetimepicker"; import { Colors } from "../../constants/Colors"; import { Fonts } from "../../constants/Fonts"; import AsyncStorage from "@react-native-async-storage/async-storage"; export default function DatePicker() { const [showStartPicker, setShowStartPicker] = useState(false); const [showEndPicker, setShowEndPicker] = useState(false); const [startDate, setStartDate] = useState(new Date()); const [endDate, setEndDate] = useState(new Date()); // Load dữ liệu ngày từ AsyncStorage khi component được mount useEffect(() => { const loadDates = async () => { try { const storedStartDate = await AsyncStorage.getItem("startDate"); const storedEndDate = await AsyncStorage.getItem("endDate"); if (storedStartDate) setStartDate(new Date(storedStartDate)); if (storedEndDate) setEndDate(new Date(storedEndDate)); } catch (error) { console.error("Lỗi khi load ngày từ AsyncStorage:", error); } }; loadDates(); }, []); // Hàm lưu ngày vào AsyncStorage const saveDateToStorage = async (key, date) => { try { await AsyncStorage.setItem(key, date.toISOString()); } catch (error) { console.error(`Lỗi khi lưu ${key} vào AsyncStorage:`, error); } }; const validateDateDifference = (newEndDate) => { const differenceInTime = newEndDate.getTime() - startDate.getTime(); const differenceInDays = differenceInTime / (1000 * 3600 * 24); return differenceInDays >= 5; } const onStartDateChange = (event, selectedDate) => { setShowStartPicker(false); if (selectedDate) { setStartDate(selectedDate); saveDateToStorage("startDate", selectedDate); if (!validateDateDifference(endDate)) { const newValidEndDate = new Date(selectedDate); newValidEndDate.setDate(newValidEndDate.getDate() + 5); setEndDate(newValidEndDate); saveDateToStorage("endDate", newValidEndDate); } } }; const onEndDateChange = (event, selectedDate) => { setShowEndPicker(false); if (selectedDate) { if (validateDateDifference(selectedDate)) { setEndDate(selectedDate); saveDateToStorage("endDate", selectedDate); } else { Alert.alert("Lỗi", "Ngày kết thúc phải cách ngày bắt đầu ít nhất 5 ngày!"); } } }; return ( <View style={styles.Container}> <> <Text style={styles.title}>Thời gian bắt đầu</Text> <TouchableOpacity style={styles.dateContainer} onPress={() => setShowStartPicker(true)} > <Text style={styles.buttonText}> {`${startDate.getDate()}/${startDate.getMonth() + 1 }/${startDate.getFullYear()}`} </Text> </TouchableOpacity> {showStartPicker && ( <DateTimePicker value={startDate} mode="date" display="default" onChange={onStartDateChange} /> )} <Text style={styles.title}>Thời gian kết thúc</Text> <TouchableOpacity style={styles.dateContainer} onPress={() => setShowEndPicker(true)} > <Text style={styles.buttonText}> {`${endDate.getDate()}/${endDate.getMonth() + 1 }/${endDate.getFullYear()}`} </Text> </TouchableOpacity> {showEndPicker && ( <DateTimePicker value={endDate} mode="date" display="default" onChange={onEndDateChange} /> )} </> </View> ); } const styles = StyleSheet.create({ Container: { padding: 10, marginVertical: 10, }, title: { color: "#ddd", fontFamily: Fonts.NUNITO_BLACK, }, dateContainer: { padding: 15, marginVertical: 10, backgroundColor: "#ddd", borderRadius: 30, }, buttonText: { fontSize: 14, color: "#333", fontFamily: Fonts.NUNITO_BOLD, }, });
Editor is loading...
Leave a Comment