প্রতিক্রিয়া - একটি ফায়ারস্টোর টাইমস্ট্যাম্প প্রদর্শন করুন


10

আমি কীভাবে একটি প্রতিক্রিয়ার অ্যাপে ফায়ারস্টোর টাইমস্ট্যাম্পটি প্রদর্শন করব তা বোঝার চেষ্টা করছি।

আমার তৈরি ফ্যাট সহ একটি ফায়ার স্টোর ডকুমেন্ট রয়েছে।

আমি এটিকে আউটপুটের তালিকায় অন্তর্ভুক্ত করার চেষ্টা করছি (এখানে প্রাসঙ্গিক বিটগুলি বের করা হচ্ছে যাতে আপনাকে ক্ষেত্রগুলির পুরো তালিকার মধ্যে পড়তে না হয়)।

componentDidMount() {
    this.setState({ loading: true });

    this.unsubscribe = this.props.firebase
      .users()
      .onSnapshot(snapshot => {
        let users = [];

        snapshot.forEach(doc =>
          users.push({ ...doc.data(), uid: doc.id }),
        );

        this.setState({
          users,
          loading: false,
        });
      });
  }

  componentWillUnmount() {
    this.unsubscribe();
  }

  render() {
    const { users, loading } = this.state;

    return (
        <div>
    {loading && <div>Loading ...</div>}

            {users.map(user => (

                <Paragraph key={user.uid}>  

       <key={user.uid}>  
       {user.email}
       {user.name}
       {user.createdAt.toDate()}
       {user.createdAt.toDate}
       {user.createdAt.toDate()).toDateString()}

একমাত্র বৈশিষ্ট্য যা রেন্ডার করে না তা হ'ল তারিখ।

উপরোক্ত প্রতিটি প্রয়াসই ত্রুটি উত্পন্ন করে যা বলে:

প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'টু ডেট' পড়তে পারে না

আমি এই পোস্টটি , এবং এই পোস্টটি এবং এই পোস্টটি , এবং এই পোস্টটি এবং তাদের মতো অন্যদের দেখেছি, যা পরামর্শ দেয় যে টুডেট () কাজ করা উচিত। তবে - এই এক্সটেনশনটি আমার জন্য ত্রুটি ছুঁড়েছে - আমি যখন টস্ট্রিং এক্সটেনশনের চেষ্টা করি তখন including

আমি জানি এটি ফায়ার স্টোরে কিছু আছে বলে আমি জানি কারণ যখন আমি ব্যবহারকারীকে তৈরি করা চেষ্টা করি তখন আমার মনে হয় একটি ত্রুটি পেয়ে যায় যে এটিতে এটি কয়েক সেকেন্ডের সাথে খুঁজে পেয়েছিল।

নীচে ওয়েলমাসের উদাহরণ গ্রহণ করে আমি এই ক্ষেত্রের আউটপুটটিকে লগ করার চেষ্টা করেছি:

this.db.collection('users').doc('HnH5TeCU1lUjeTqAYJ34ycjt78w22').get().then(function(doc) {
  console.log(doc.data().createdAt.toDate());

}

আমি আমার মানচিত্রের বিবৃতিতে এটি যুক্ত করার চেষ্টাও করেছি তবে একটি ত্রুটি পেয়েছে যা বলেছে যে ইউজার.জেট কোনও কাজ নয়।

{user.get().then(function(doc) {
                    console.log(doc.data().createdAt.toDate());}
                  )}

এটি উপরের মতো একই ত্রুটি বার্তা উত্পন্ন করে।

এখানে চিত্র বর্ণনা লিখুন

পরবর্তী মনোযোগ

একটি অদ্ভুত জিনিস যা ফায়ার স্টোরে একটি তারিখ রেকর্ড করার উপায় খুঁজতে চেষ্টা করেছে যা আমাকে তা আবার পড়তে দেয়, তা হ'ল আমি যখন এই সূত্রটি ব্যবহার করার জন্য আমার জমা হ্যান্ডলারটি এক ফর্মটিতে পরিবর্তন করি:

handleCreate = (event) => {
    const { form } = this.formRef.props;
    form.validateFields((err, values) => {
      if (err) {
        return;
      };
    const payload = {
    name: values.name,
    // createdAt: this.fieldValue.Timestamp()
    // createdAt: this.props.firebase.fieldValue.serverTimestamp()

    }
    console.log("formvalues", payload);
    // console.log(_firebase.fieldValue.serverTimestamp());


    this.props.firebase
    .doCreateUserWithEmailAndPassword(values.email, values.password)
    .then(authUser => {
    return this.props.firebase.user(authUser.user.uid).set(
        {
          name: values.name,
          email: values.email,
          createdAt: new Date()
          // .toISOString()
          // createdAt: this.props.firebase.fieldValue.serverTimestamp()

        },
        { merge: true },
    );
    // console.log(this.props.firebase.fieldValue.serverTimestamp())
    })
    .then(() => {
      return this.props.firebase.doSendEmailVerification();
      })
    // .then(() => {message.success("Success") })
    .then(() => {
      this.setState({ ...initialValues });
      this.props.history.push(ROUTES.DASHBOARD);

    })


  });
  event.preventDefault();
    };

এটি ডাটাবেসে একটি তারিখ রেকর্ড করতে কাজ করে।

ফায়ারস্টোর প্রবেশের ফর্মটি দেখতে এই রকম:

এখানে চিত্র বর্ণনা লিখুন

আমি এই উপাদানটিতে একটি তারিখ প্রদর্শন করার চেষ্টা করছি:

class UserList extends Component {
  constructor(props) {
    super(props);

    this.state = {
      loading: false,
      users: [],
    };
  }

  componentDidMount() {
    this.setState({ loading: true });

    this.unsubscribe = this.props.firebase
      .users()
      .onSnapshot(snapshot => {
        let users = [];

        snapshot.forEach(doc =>
          users.push({ ...doc.data(), uid: doc.id }),
        );

        this.setState({
          users,
          loading: false,
        });
      });
  }

  componentWillUnmount() {
    this.unsubscribe();
  }

  render() {
    const { users, loading } = this.state;

    return (
      <div>
          {loading && <div>Loading ...</div>}

          <List
            itemLayout="horizontal"
            dataSource={users}

            renderItem={item => (
              <List.Item key={item.uid}>
                <List.Item.Meta
                  title={item.name}
                  description={item.organisation}
                />
                  {item.email}
                  {item.createdAt}
                  {item.createdAt.toDate()}
                  {item.createdAt.toDate().toISOString()}

              </List.Item>
            // )
          )}
          />

      </div>
    );
  }
}

export default withFirebase(UserList);

আমি যখন এটি আবার পড়ার চেষ্টা করি - ব্যবহার করে:

{Item.email}

ত্রুটি বার্তাটি পড়ে:

ত্রুটি: বস্তুগুলি প্রতিক্রিয়া শিশু হিসাবে বৈধ নয় (পাওয়া গেছে: টাইমস্ট্যাম্প (সেকেন্ড = 1576363035, ন্যানোসেকেন্ডস = 52000000))। যদি আপনি বাচ্চাদের সংগ্রহ সরবরাহ করতে চান, তবে পরিবর্তে একটি অ্যারে ব্যবহার করুন। আইটেমে (ইউজারআইডেক্স.জেএসএক্স: 74)

আমি যখন এই প্রচেষ্টাগুলির প্রত্যেকটি ব্যবহার করার চেষ্টা করি:

{item.createdAt}
{item.createdAt.toDate()}
{item.createdAt.toDate().toISOString()}

আমি একটি ত্রুটি পেয়েছি যা বলে:

প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'টু ডেট' পড়তে পারে না

অন্যান্য ক্ষেত্রে একই ডকুমেন্টে লগইন করা এন্ট্রিগুলি পুনরায় পড়ার দক্ষতার উপর ভিত্তি করে, আমি আশা করি যে এটির যে কোনওটি আউটপুট তৈরির জন্য কাজ করবে - যদি এটি আমার ইচ্ছা মতো ফর্ম্যাট না হয়। তা হয় না।

পরবর্তী মনোযোগ

ওয়েলমাসের উদাহরণ গ্রহণ করে, আমি নির্দেশাবলী অনুসরণ করার চেষ্টা করেছি, তবে যেখানে আমরা একই প্রতিক্রিয়া পাচ্ছি না তা প্রথম পদক্ষেপে। টো ডেট () এক্সটেনশনের উপর ভিত্তি করে ওয়ালামাস যেখানে আউটপুট পায় সেখানে টো ডেট () কোনও ফাংশন নয় বলে আমি ত্রুটি পেয়েছি।

ফায়ারবেস ডকুমেন্টেশনের সাথে সামঞ্জস্য রেখে আমি চেষ্টা করেছি:

    const docRef = this.props.firebase.db.collection("users").doc("HnH5TeCU1lUjeTqAYJ34ycjt78w22");

docRef.get().then(function(docRef) {
    if (doc.exists) {
        console.log("Document createdAt:", docRef.createdAt.toDate());

}})

এটি সিনট্যাক্সের সাথে ত্রুটির একটি স্ট্রিং তৈরি করে এবং আমি তাদের কাছাকাছি কোনও উপায় খুঁজে পাচ্ছি না।

পরবর্তী মনোযোগ

আমি তখন ব্যবহারকারীদের ফর্মটির প্রমাণীকরণের দিকটি ছাড়াই এটি অন্বেষণ করতে পারি কিনা তা দেখার জন্য একটি নতুন ফর্ম তৈরি করার চেষ্টা করেছি।

আমার একটি ফর্ম রয়েছে যা ইনপুট হিসাবে গ্রহণ করে:

this.props.firebase.db.collection("insights").add({
            title: title,
            text: text,
            // createdAt1: new Date(),
            createdAt: this.props.firebase.fieldValue.serverTimestamp()
        })

পূর্ববর্তী ফর্মটিতে, নতুন তারিখ () প্রয়াস ডাটাবেসে একটি তারিখ রেকর্ড করার জন্য কাজ করেছিল, উদাহরণস্বরূপ, তৈরিআউট এবং তৈরিএটি 1 উভয় ক্ষেত্র একই ডাটাবেস এন্ট্রি উত্পন্ন করে:

এখানে চিত্র বর্ণনা লিখুন

<div>{item.createdAt.toDate()}</div>
                    <div>{item.createdAt.toDate()}</div>

আমি যখন তারিখগুলির মান আউটপুট দেওয়ার চেষ্টা করি, প্রথমটি একটি ত্রুটি উত্পন্ন করে যা বলে:

প্রতিক্রিয়া সন্তানের হিসাবে অবজেক্টগুলি বৈধ নয় (পাওয়া গেছে: সান ডিসেম্বর 15 2019 21:33:32 GMT + 1100 (অস্ট্রেলিয়ান পূর্ব দিনের আলো সময়))। যদি আপনি বাচ্চাদের সংগ্রহ সরবরাহ করতে চান, তবে পরিবর্তে একটি অ্যারে ব্যবহার করুন

দ্বিতীয়টি বলে ত্রুটি উত্পন্ন করে:

প্রকারের ত্রুটি: অনির্ধারিত সম্পত্তি 'টু ডেট' পড়তে পারে না

পরবর্তী কী চেষ্টা করা যায় সে সম্পর্কে আমি ধারণার জন্য আটকে আছি।

আমি এই পোস্টটি দেখেছি যা নীচে সুপারিশ করে যে কার্যকর কিছু করতে পারে:

                {item.createdAt1.Date.valueOf()}

এটা হয় না। এটি এমন একটি ত্রুটি সরবরাহ করে যা বলে:

প্রকারের ত্রুটি: অপরিজ্ঞাপিতের সম্পত্তি 'তারিখ' পড়তে পারে না

এই পোস্টটি আমার মতো একই সমস্যা হচ্ছে বলে মনে হচ্ছে, তবে তারা কীভাবে তারা সঞ্চিত তারিখের মান প্রদর্শন করতে পরিচালিত হয়েছিল তা doesn't

এই পোস্টটি অ্যারের ত্রুটি বার্তায় আটকে যাচ্ছে বলে মনে হচ্ছে, তবে কীভাবে তৈরিডেট টু ডেট () ব্যবহার করে একটি তারিখ প্রদর্শন করবেন তা নির্ধারণ করেছেন

উত্তর:


1

কিছুক্ষণ আলোচনার পরে, আমরা দেখতে পেলাম যে ওপি ব্যবহারকারীর অবজেক্টের সময় স্ট্যাম্পগুলি রেন্ডার হতে পারে:

render() { 
const { users, loading } = this.state; 

return ( 
    <div> 
        {loading && <div>Loading ...</div>} 

        {users.map(user => ( 

            <Paragraph key={user.uid}> 

                <key={user.uid}> 
                    {user.email} 
                    {user.name} 
                    {new Date(user.createdAt.seconds * 1000).toLocaleDateString("en-US")}

আমি একটি ডামি প্রতিক্রিয়া প্রকল্পে আপনার উদাহরণটি পুনরায় তৈরি করেছি এবং প্রত্যাশার মতো একই ত্রুটি পেয়েছি।

ত্রুটি: প্রতিক্রিয়া শিশু হিসাবে অবজেক্টগুলি বৈধ নয়

আমি নিম্নলিখিত পদ্ধতির সাথে এটি সঠিকভাবে রেন্ডার করতে সক্ষম হয়েছি, যা আপনার পক্ষেও কাজ করা উচিত:

{new Date(user.createdAt._seconds * 1000).toLocaleDateString("en-US")}

কোনটি, আমার নমুনা টাইমস্ট্যাম্পের জন্য, হিসাবে রেন্ডার করা হয়েছে:

12/30/2019


নিশ্চিত হয়ে নিন যে আপনি এমন টাইমস্ট্যাম্প ব্যবহার করছেন যা ফায়ার স্টোরে সংরক্ষণ করা হয়েছিল:

createdAt: this.props.firebase.Timestamp.fromDate(new Date())

দ্রষ্টব্য: এটি ধরে নিচ্ছে যে আপনার উদাহরণটি firebase.firestore()এখানে রয়েছেthis.props.firebase । অন্যান্য উদাহরণে আপনি এটি.পড়গুলি.ফায়ারবাজ ব্যবহার করেন তবে সেই পদ্ধতিগুলি আপনাকে নিজেরাই তৈরি করা সহায়ক পদ্ধতির মতো দেখায়।

যখন এই মানটি পাওয়া যায়, তখন এটি দুটি বৈশিষ্ট্যযুক্ত একটি বস্তু হবে - _secondsএবং _nanoseconds

আন্ডারস্কোর অন্তর্ভুক্ত করতে ভুলবেন না। আপনি যদি createdAt.secondsএটি ব্যবহার করেন তবে এটি কাজ করবে না, এটি অবশ্যই হবে createdAt._seconds


অন্যান্য জিনিস আমি চেষ্টা করেছি:

user.createdAt.toDate()ছোঁড়ার toDate() is not a function

user.createdAt ছোঁড়ার Error: Objects are not valid as a React child

new Date(user.createdAt._nanoseconds) ভুল তারিখটি রেন্ডার করে


হাই - পরামর্শের জন্য ধন্যবাদ। আমি এটি চেষ্টা করেছিলাম এবং একটি ত্রুটি পেয়েছি যা বলে: টাইপআররার: অপরিজ্ঞাতকৃত সম্পত্তি 'টাইমস্ট্যাম্প' পড়তে পারি না
মেল

আমি চেষ্টাও করেছি: তৈরিএট: ফায়ারবেস.ফায়ারস্টোর.ফিল্ড.লাইভার.সাইভারটাইমস্ট্যাম্প ()। থেকে তারিখ (নতুন তারিখ ()), যা বলে যে একটি ত্রুটি ফিরে আসে: টাইপ-এয়ারর: অপরিশোধিত এর 'ফিল্ডভ্যালু' পড়তে পারে না
মেল

যদিও এটি আমার পক্ষে কার্যকর হয়নি তবে আমি বুঝতে আগ্রহী যে আপনি কীভাবে আপনার ব্যবহার করেছেন এমন ফর্ম্যাটটি ব্যবহার করে দেখতে এসেছেন। এটি ডকুমেন্টেশনে দেখানো হয়নি। যদি আমি শিখতে পারি যে আপনি কীভাবে আপনার জন্য কাজ করে এমন কোনও জিনিস আবিষ্কার করেন তবে এটি আমার জন্য একটি উপায় খুঁজে বের করতে পারে (কেন এটি সবার জন্য একই জিনিস নয় তা আমি বুঝতে পারি না - তবে জিনিসগুলি চেষ্টা করার জন্য আমার নতুন ধারণা প্রয়োজন )। সাহায্য করার চেষ্টা করার জন্য আবার ধন্যবাদ।
মেল

আমি যা করতে পারি তা ব্যবহার করে একটি তারিখ সংরক্ষণ করুন (উপরে দেখানো হয়েছে): তৈরিএটি: এই.প্রেস.ফায়ারবেস.ফিল্ডভ্যালু.সভারটাইমস্ট্যাম্প (),
মেল


5

আপনি যখন ফায়ারস্টোর থেকে টাইমস্ট্যাম্পগুলি পান তবে সেগুলি নিম্নলিখিত ধরণের হয়:

এখানে চিত্র বর্ণনা লিখুন

এটিকে একটি সাধারণ টাইমস্ট্যাম্পে রূপান্তর করতে আপনি .toDate () ফাংশনটি ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, নীচের মতো নথির জন্য:

এখানে চিত্র বর্ণনা লিখুন

আমরা এর মতো কিছু ব্যবহার করতে পারি:

db.collection('[COLLECTION]').doc('[DOCUMENT]').get().then(function(doc) {
  console.log(doc.data().[FIELD].toDate());
});

এবং আউটপুট যেমন হবে:

2019-12-16T16:27:33.031Z

এখন সেই টাইমস্ট্যাম্পটি আরও প্রক্রিয়া করার জন্য, আপনি এটিকে স্ট্রিংয়ে রূপান্তর করতে পারেন এবং আপনার প্রয়োজন অনুসারে এটিকে সংশোধন করতে রেজেেক্স ব্যবহার করতে পারেন।

উদাহরণস্বরূপ: (আমি এখানে নোড.জেএস ব্যবহার করছি)

db.collection('[COLLECTION]').doc('[DOCUMENT]').get().then(function(doc) {
  var stringified = doc.data().[FIELD].toDate().toISOString();
  //console.log(stringified);
  var split1 = stringified.split('T');
  var date = split1[0].replace(/\-/g, ' ');
  console.log(date);
  var time = split1[1].split('.');
  console.log(time[0]);
});

আপনাকে এরকম একটি আউটপুট দেবে:

এখানে চিত্র বর্ণনা লিখুন


উদাহরণের জন্য আপনাকে ধন্যবাদ। আমার প্রচেষ্টায় আমারও একই কাঠামো রয়েছে। এটি ডকুমেন্টের সমস্ত স্ট্রিং মানগুলি ফিরিয়ে আনতে কাজ করে তবে তারিখ নয়। পরিবর্তে, এটি উপরে পোস্ট করা বার্তাটি দিয়ে একটি ত্রুটি উত্পন্ন করে। এটা কোন মানে না। আমি টোয়েন্টিস্ট্রিং () এক্সটেনশনটি যুক্ত করার চেষ্টা করেছি তবে এটি ত্রুটির বার্তাটি পরিবর্তন করে না (এটি কেবল ফর্ম্যাট করা উচিত)
মেল

আপনি কি কনসোলে টাইমস্ট্যাম্পের মানটি লগ করতে পারেন? এটি নিশ্চিত করার জন্য এটি সঠিক ধরণের ফায়ারস্টোর টাইমস্ট্যাম্প। @ মেল
ওয়েলমাস

না - কনসোল লগটি কাজ করে না - এটি একটি ত্রুটিও উত্পন্ন করে - তবে তারিখটি টেবিলের তৈরি এ্যাট ফিল্ডে রেকর্ড হয়ে যায় - এখন আমি কেবল এটি আবার পড়ার চেষ্টা করছি। আমি কীভাবে রেকর্ড করার তারিখটি পেয়েছিলাম তা ব্যাখ্যা করে একটি পোস্ট তৈরি করেছি (ফায়ারবেস ডকুমেন্টেশন অনুযায়ী নয়): stackoverflow.com/questions/59257755/…
মেল

যেহেতু আপনি সরকারী ডক্স দ্বারা প্রস্তাবিত চেয়ে আলাদা পদ্ধতির অনুসরণ করছেন তাই আমি নিশ্চিত নই যে আসলে কী ভুল হচ্ছে। দেখে মনে হচ্ছে আপনি যেভাবে টাইমস্ট্যাম্পটি তৈরি করছেন এবং প্রথম দিকে ধাক্কা দিচ্ছেন তা কোনওভাবে ত্রুটিযুক্ত। আপনি যখন ফায়ার স্টোরে একটি টাইমস্ট্যাম্প সঞ্চয় করেন তখন এটি আমার উত্তরের শুরুতে উল্লেখ করা ফর্ম্যাটটির একটি বিষয় হতে হবে। এইভাবে এটি বৈধ টাইমস্ট্যাম্প হিসাবে স্বীকৃত হয় যা এরপরে .toDate () এর সাথে ব্যবহার করা যেতে পারে। ফায়ারস্টোর.টাইমস্ট্যাম্প.নো () এটি পরীক্ষা করে দেখার জন্য আপনাকে সঠিক বিন্যাসের একটি টাইমস্ট্যাম্প দেবে। @ মেল
ওয়েলমাস

টাইম স্ট্যাম্প তৈরির জন্য আমি অফিসিয়াল ডকুমেন্টেশন অনুসরণ করার চেষ্টা করেছি। আমি এটি কাজ করতে পারে না। তারিখ রেকর্ড করার জন্য আমি বিকল্প পথে হোঁচট খেয়েছি এবং এখন আউটপুটটি আর পড়তে পারছি না! খুবই হতাশাজনক. যাইহোক সাহায্য করার চেষ্টা করার জন্য ধন্যবাদ।
মেল

2

সুতরাং ফায়ার স্টোর সেকেন্ড এবং ন্যানোসেকেন্ড সহ একটি অবজেক্ট হিসাবে তারিখগুলি সঞ্চয় করে। আপনি যদি ব্যবহারকারীটি তৈরির সময় চান তবে আপনি উল্লেখ করতে পারেন user.createdAt.nanoseconds। এটি একটি ইউনিক্স টাইমস্ট্যাম্প ফেরত দেয়।

আপনি কীভাবে আপনার অ্যাপে তারিখটি প্রদর্শন করতে চান? আপনি যদি কোনও তারিখের অবজেক্ট পেতে চান তবে আপনি টাইমস্ট্যাম্পটি এর মতো একটি তারিখ নির্মাণকারীকে পাস করতে পারেন new Date(user.createdAt.nanoseconds)। ব্যক্তিগতভাবে আমি সময় পরিচালনা করার জন্য ডেট-এফএনএস লাইব্রেরিটি উপভোগ করি ।


ধন্যবাদ - আমি এই পরামর্শটি চেষ্টা করেছিলাম। এটি এমন একটি ত্রুটি দেয় যা বলে: টাইপআরার: সংজ্ঞায়িত সম্পত্তি 'ন্যানোসেকেন্ডস' পড়তে পারে না। আপনি এখন যে প্রস্তাবিত লাইব্রেরিটি পরামর্শ দিয়েছেন তা আমি দেখতে পেয়েছি
মেল

আপনি তৈরি লগ করতে পারেন এবং শেয়ার করুন দয়া করে। ডেটা হিসাবে async প্রকৃতি দেওয়া, আপনি সম্ভবত এটি ঠিক যেমন ফিরে প্রয়োজন user.createdAt && new Date(user.createdAt.nanoseconds)। ডেট-এফএনএস এই সমস্যাটিতে সহায়তা করবে না, এটি একবার হলে তারিখটি প্রদর্শনের জন্য কেবল একটি সহজ লাইব্রেরি।
জোশ পিটম্যান

তৈরিএটি ড্রপডাউন মেনুগুলির একটি দীর্ঘ তালিকা লগ করে। ফায়ার স্টোরে মাঠে প্রদর্শিত তারিখ সমেত কোনও খুঁজে পাচ্ছি না। প্রথম অংশ: createdAt: ServerTimestampFieldValueImpl _methodName: "FieldValue.serverTimestamp" প্রোটো : FieldValueImpl কন্সট্রাকটর: ƒ ServerTimestampFieldValueImpl () উদাহরণ হিসেবে বলা যায়: ServerTimestampFieldValueImpl _methodName: "FieldValue.serverTimestamp" প্রোটো : FieldValueImpl কন্সট্রাকটর: ServerTimestampFieldValueImpl ƒ () উদাহরণ হিসেবে বলা যায়: ServerTimestampFieldValueImpl {_methodName: " FieldValue.serverTimestamp "} যুক্তি: (...) কলার: (...)
মেল

দেখে মনে হচ্ছে আপনি টাইমস্ট্যাম্প ফাংশনটিকে ডাটাবেসে ফেলেছেন, আসল টাইমস্ট্যাম্প নয়। আপনি কীভাবে টাইমস্ট্যাম্পটি সেট করছেন? firestore.FieldValue.serverTimestamp()
জোশ পিটম্যান

ফায়ার স্টোরে প্রদর্শিত এন্ট্রিটি আমি সংযুক্ত ছবিটি photo এটি এন্ট্রি: this.prop.firebase.fieldValue.serverTimestamp ()
মেল

2

ফায়ার স্টোরে কীভাবে তারিখটি পাঠানো যায়:

import firebase from 'firebase/app';

// ..........
// someObject is the object you're saving to your Firestore.

someObject.createdAt: firebase.firestore.Timestamp.fromDate(new Date())

কীভাবে এটি আবার পড়বেন:

function mapMonth(monthIndex) {
  const months = {
    0: 'jan',
    1: 'feb',
    2: 'mar',
    3: 'apr',
    4: 'may',
    5: 'jun',
    6: 'jul',
    7: 'aug',
    8: 'sep',
    9: 'oct',
    10: 'nov',
    11: 'dec'
  };
  return months[monthIndex];
}

// ..........
// Here you already read the object from Firestore and send its properties as props to this component.

return(
    <LS.PostDate_DIV>
      Published on {mapMonth(props.createdAt.toDate().getMonth()) + ' '}
      of {props.createdAt.toDate().getFullYear()}
    </LS.PostDate_DIV>
  );
}

মূলত যখন আপনি createdAt.toDate()কোন জেএস তারিখ অবজেক্ট পাবেন।

আমি সব সময় এটি ব্যবহার!

থেকে: https://cloud.google.com/firestore/docs/manage-data/add-data

এখানে চিত্র বর্ণনা লিখুন

এটি ব্যবহারকারীর সিস্টেমের তারিখের ভিত্তিতে একটি ডেটা তৈরি করবে। আপনার যদি নিশ্চিত হওয়া দরকার যে আপনার ডিবিতে সমস্ত কিছু কালানুক্রমিকভাবে সংরক্ষণ করা হবে (আপনার ব্যবহারকারী সিস্টেম দ্বারা নির্ধারিত ভুল সিস্টেমের তারিখগুলির কোনও ত্রুটি ছাড়াই), আপনার একটি সার্ভার টাইমস্ট্যাম্প ব্যবহার করা উচিত। আপনার ফায়ারস্টোর ডিবি অভ্যন্তরীণ তারিখ সিস্টেমটি ব্যবহার করে তারিখটি সেট করা হবে।

এখানে চিত্র বর্ণনা লিখুন


এর জন্য ধন্যবাদ, তবে আমি যে ঝামেলাটি কাটিয়ে উঠার চেষ্টা করছি তা হ'ল ডাটাবেসে রেকর্ড করা তারিখটি প্রদর্শনের কোনও উপায় আমি খুঁজে পাচ্ছি না। আমি যে ধরণের ভাগ করেছি তার ত্রুটিগুলি পেতে থাকি।
মেল

2

কোনও ব্যবহারকারীর নথির আইডির সাথে createdAtসম্পত্তি সেট রয়েছে, নিম্নলিখিতটি চেষ্টা করুন:

const docRef = db.collection("users").doc("[docID]");

docRef.get().then(function(docRef) {
  if (docRef.exists) {
     console.log("user created at:", docRef.data().createdAt.toDate());
  }
})

.data()আমি নথির বৈশিষ্ট্য অ্যাক্সেস করার আগে পদ্ধতিটি কল করা গুরুত্বপূর্ণ

মনে রাখবেন যে আপনি যদি এমন docRef.data().createdAt.toDate()কোনও ব্যবহারকারীর অ্যাক্সেস করেন যার জন্য createdAtপ্রাইটিটি সেট করা নেই, আপনি পাবেনTypeError: Cannot read property 'toDate' of undefined

সুতরাং আপনার সংগ্রহে এমন কোনও ব্যবহারকারী রয়েছে যার কোনও createdAtসম্পত্তি সংজ্ঞায়িত হয়নি। ব্যবহারকারীর createdAtসম্পত্তি পাওয়ার আগে এটির সম্পত্তি আছে কিনা তা যাচাই করার জন্য আপনার একটি যুক্তি প্রয়োগ করা উচিত । আপনি এর মতো কিছু করতে পারেন:

//This code gets all the users and logs it's creation date in the console
docRef.get().then(function(docRef) {
  if (docRef.exists && docRef.data().createdAt) {
      console.log("User created at:", docRef.data().createdAt.toDate());
  }
})

আপনি উপরে দেখতে পারেন, আমি নথির ক্ষেত্রে আমার অনুরোধগুলিতে ডেটা () ব্যবহার করি। আমি না হলে অন্যান্য ক্ষেত্রগুলি রেন্ডার করত না। নির্দিষ্ট সমস্যাটি টাইম স্ট্যাম্পের সাথে, যা রেন্ডার করে না। আমি যে প্রচেষ্টা করেছি এবং এর একটি আমি উপরে সেট করেছিলাম তার মধ্যে টোডেট () এক্সটেনশনটি ব্যবহার করার চেষ্টা অন্তর্ভুক্ত রয়েছে। এটি কাজ করে না - উপরে বর্ণিত কারণগুলির জন্য। আপনার সময়ের জন্য যাইহোক ধন্যবাদ।
মেল

0

আমি অতীতে নেস্টেড অবজেক্ট বৈশিষ্ট্যগুলির তালিকাগুলিতে যেখানে item.somePropকোনও বস্তু হিসাবে বিবেচিত হয় ঠিকমতো রেন্ডারিং না করায় সমস্যার মুখোমুখি হয়েছি , তবে ইন item.someProp.someSubPropএর মান দিয়ে সমাধান করবে না ।someSubPropitem.someProp

সুতরাং ইস্যুটির চারপাশে স্কার্টের জন্য, ব্যবহারকারী অবজেক্ট তৈরি করার সময় টাইমস্ট্যাম্পকে একটি সমতল তারিখের অবজেক্টে (বা পছন্দসই প্রদর্শন বিন্যাস) মূল্যায়ন করবেন না কেন?

this.unsubscribe = this.props.firebase
  .users()
  .onSnapshot(snapshot => {
    let users = [];

    snapshot.forEach(doc =>
      let docData = doc.data();
      docData.createdAt = docData.createdAt.toDate();
      users.push({ ...docData, uid: doc.id }),
    );

    this.setState({
      users,
      loading: false,
    });
  });

এটি উভয়ই লক্ষণীয় DocumentSnapshot#data()এবং এটি DocumentSnapshot#get()এমন কোনও বিষয় গ্রহণ করুন যা কীভাবে এখনও চূড়ান্ত নয় এমন FieldValue.serverTimestamp()মানগুলি পরিচালনা করতে পারে তা নির্দিষ্ট করে । ডিফল্টরূপে, একটি-এখনও-চূড়ান্ত করা সহজভাবে বাতিল হবে। ব্যবহারের { serverTimestamps: "estimate"}ফলে এই নাল মানগুলিকে একটি অনুমানে পরিবর্তন করা হবে।
samthecodingman

হাই - পরামর্শের জন্য ধন্যবাদ। আমি এটি চেষ্টা করতে চাই তবে আমি এটি বুঝতে পারি না - বা কীভাবে আমি এটি বাস্তবায়নের চেষ্টা করতে পারি। আপনি এই পরামর্শটি সামনে আনতে যে নীতিগুলি প্রয়োগ করছেন তার জন্য কি কোনও সম্মেলন রয়েছে? যদি আমি পদ্ধতির বিষয়ে সাহিত্য পেতে পারি, আমি আপনার ধারণাটি কীভাবে কাজ করে তা বের করার চেষ্টা করব যাতে আমার কোডটিতে এটি চেষ্টা করতে পারি।
মেল

আমি এটির জন্য কোনও বিশেষ সংস্থান পাইনি, কারণ আমি কয়েক বছর ধরে স্ট্যাকওভারফ্লো প্রশ্নগুলি দেখার পরে এটি তুলেছিলাম
samthecodingman

ভাগ করে নেওয়ার জন্য ধন্যবাদ. আমি আজ রাতে এই পড়ব
মেল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.